201039_01 PDK_4.0.a
authorhgs
Wed, 06 Oct 2010 16:00:22 +0300
changeset 125 26079c1bb561
parent 123 d1dadafc5584
child 126 efda7c0771b9
201039_01
activityfw/activityserviceplugin/activityserviceplugin.pro
activityfw/activityserviceplugin/src/afactivation.cpp
activityfw/afactivitylauncher/group/afactivitylauncher.mmp
activityfw/orbitintegration/hbactivityplugin/hbactivityplugin.pro
activityfw/rom.pri
activityfw/storage/client/group/client.mmp
activityfw/storage/common/group/common.mmp
activityfw/storage/common/inc/afcmd.h
activityfw/storage/server/group/server.mmp
activityfw/storage/server/inc/afserver.h
activityfw/storage/server/src/afserver.cpp
activityfw/storage/server/src/afsession.cpp
activityfw/storage/server/src/afstoragesynctask.cpp
common.pri
contentstorage/caclient/bwins/caclientu.def
contentstorage/caclient/caclient.pri
contentstorage/caclient/caclient.pro
contentstorage/caclient/eabi/caclientu.def
contentstorage/caclient/inc/caentry_p.h
contentstorage/caclient/src/caentry.cpp
contentstorage/caclient/src/caiconcache.cpp
contentstorage/caclient/src/caitemmodel.cpp
contentstorage/caclient/src/caservice.cpp
contentstorage/cahandler/app/app.pro
contentstorage/cahandler/tapp/src/catapphandler.cpp
contentstorage/cahandler/tapp/tapp.pro
contentstorage/cahandler/url/url.pro
contentstorage/camificonengine/camificonengine.pro
contentstorage/casatinterface/group/MenuInterface.mmp
contentstorage/casoftwareregistry/casoftwareregistry.pri
contentstorage/casoftwareregistry/casoftwareregistry.pro
contentstorage/casoftwareregistry/s60/src/casoftwareregistry_p.cpp
contentstorage/casoftwareregistry/src/casoftwareregistry.cpp
contentstorage/casrv/caappscanner/group/caappscanner.mmp
contentstorage/casrv/calocalizerscanner/calocalizerscanner.pro
contentstorage/casrv/calocalizerscanner/contentstorage.qm
contentstorage/casrv/calocalizerscanner/contentstorage.ts
contentstorage/casrv/casatmonitor/group/casatmonitor.mmp
contentstorage/casrv/casrvmgr/group/casrvmanager.mmp
contentstorage/casrv/causifscanner/group/causifscanner.mmp
contentstorage/casrv/causifscanner/src/causifscanner.cpp
contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp
contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h
contentstorage/casrv/cawidgetscanner/inc/cawidgetstoragehandler.h
contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp
contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp
contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp
contentstorage/castorage/conf/castoragedb_templates/castoragedb_variant.sql
contentstorage/castorage/data/castoragedb_create.sql
contentstorage/castorage/group/castorage.mmp
contentstorage/cautils/cautils.pro
contentstorage/group/camenu.mmp
contentstorage/group/camenusrv.mmp
contentstorage/inc/cadef.h
contentstorage/srvinc/castorageproxy.h
contentstorage/srvsrc/castorageproxy.cpp
homescreensrv.pro
homescreensrv_plat/activity_framework_api/afactivities_global.h
homescreensrv_plat/activity_framework_api/tsrc/mocks/inc/afstorageclient.h
homescreensrv_plat/activity_framework_api/tsrc/mocks/inc/afstorageproxy.h
homescreensrv_plat/activity_framework_api/tsrc/mocks/inc/applicationlauncher_p.h
homescreensrv_plat/activity_framework_api/tsrc/mocks/src/afstorageclient.cpp
homescreensrv_plat/activity_framework_api/tsrc/mocks/src/afstorageproxy.cpp
homescreensrv_plat/activity_framework_api/tsrc/mocks/src/applicationlauncher_p.cpp
homescreensrv_plat/activity_framework_api/tsrc/t_afactivation/inc/t_afactivation.h
homescreensrv_plat/activity_framework_api/tsrc/t_afactivation/src/t_afactivation.cpp
homescreensrv_plat/activity_framework_api/tsrc/t_afactivation/t_afactivation.pro
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/inc/t_afactivitylauncher.h
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/inc/afapplicationlauncher.h
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/inc/afstorageclient.h
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/src/afapplicationlauncher.cpp
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/src/afstorageclient.cpp
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/src/t_afactivitylauncher.cpp
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/t_afactivitylauncher.pro
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitystorage/inc/t_afactivitystorage.h
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitystorage/src/t_afactivitystorage.cpp
homescreensrv_plat/activity_framework_api/tsrc/t_afactivitystorage/t_afactivitystorage.pro
homescreensrv_plat/activity_framework_api/tsrc/tsrc.pro
homescreensrv_plat/activity_framework_api/tsrc/tsrc_common.pri
homescreensrv_plat/contentstorage_api/caclient_global.h
homescreensrv_plat/contentstorage_api/cadefs.h
homescreensrv_plat/contentstorage_api/caentry.h
homescreensrv_plat/contentstorage_api/caicondescription.h
homescreensrv_plat/contentstorage_api/caitemmodel.h
homescreensrv_plat/contentstorage_api/camenuiconutility.h
homescreensrv_plat/contentstorage_api/canotifier.h
homescreensrv_plat/contentstorage_api/canotifierfilter.h
homescreensrv_plat/contentstorage_api/caquery.h
homescreensrv_plat/contentstorage_api/caservice.h
homescreensrv_plat/contentstorage_api/casoftwareregistry.h
homescreensrv_plat/contentstorage_api/cauninstallnotifier.h
homescreensrv_plat/contentstorage_api/contentstorage_api.pri
homescreensrv_plat/contentstorage_api/inc/caclient_global.h
homescreensrv_plat/contentstorage_api/inc/cadefs.h
homescreensrv_plat/contentstorage_api/inc/caentry.h
homescreensrv_plat/contentstorage_api/inc/caicondescription.h
homescreensrv_plat/contentstorage_api/inc/caitemmodel.h
homescreensrv_plat/contentstorage_api/inc/camenuiconutility.h
homescreensrv_plat/contentstorage_api/inc/canotifier.h
homescreensrv_plat/contentstorage_api/inc/canotifierfilter.h
homescreensrv_plat/contentstorage_api/inc/caquery.h
homescreensrv_plat/contentstorage_api/inc/caservice.h
homescreensrv_plat/contentstorage_api/inc/casoftwareregistry.h
homescreensrv_plat/contentstorage_api/inc/cauninstallnotifier.h
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/castorage.db
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/emailTest.qm
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/inc/t_caclient.h
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/inc/t_caclientnotifier.h
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_createupdate.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_entryquery.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_executecommand.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_getentries.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_notifier.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_organize.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_remove.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclientnotifier.cpp
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api.pri
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api.pro
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api_installs_unix.pri
homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api_installs_win32.pri
homescreensrv_plat/contentstorage_api/tsrc/tsrc.pro
homescreensrv_plat/hswidgetmodel_api/hswidgetmodel_api.metaxml
homescreensrv_plat/taskswitcher_api/taskswitcher_api.pri
homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/inc/t_tstasksettings.h
homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/src/t_tstasksettings.cpp
homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/t_tstasksettings.pro
homescreensrv_plat/taskswitcher_api/tsrc/tsrc.pro
hsappkeyhandler/group/hsappkeyplugin.mmp
package_definition.xml
taskswitcher/activitytsplugin/activitytsplugin.pro
taskswitcher/activitytsplugin/inc/activitytsmodel.h
taskswitcher/activitytsplugin/src/activitytsentry.cpp
taskswitcher/activitytsplugin/src/activitytsmodel.cpp
taskswitcher/backstepping/eabi/tsbacksteppingu.def
taskswitcher/backstepping/group/tsbackstepping.mmp
taskswitcher/backstepping/inc/tsbackstepping.h
taskswitcher/backstepping/src/tsbackstepping.cpp
taskswitcher/backstepping/src/tsbacksteppingactivation.cpp
taskswitcher/client/client.pro
taskswitcher/inc/tstaskmonitorglobals.h
taskswitcher/rom.pri
taskswitcher/rom/bld.inf
taskswitcher/rom/tsdevicedialog_core.iby
taskswitcher/rom/tsdevicedialog_resources.iby
taskswitcher/screenshotplugin/group/tsscreenshotplugin.mmp
taskswitcher/screenshotplugin/inc/tsscreenshotplugin.h
taskswitcher/screenshotplugin/src/tsscreenshotplugin.cpp
taskswitcher/server/inc/tsdatalist.h
taskswitcher/server/inc/tsresourcemanagerimp.h
taskswitcher/server/inc/tsrunningapp.h
taskswitcher/server/inc/tsrunningappimp.h
taskswitcher/server/inc/tsrunningappmodel.h
taskswitcher/server/inc/tsrunningappserver.h
taskswitcher/server/inc/tsrunningappstorage.h
taskswitcher/server/inc/tsrunningappstorageimp.h
taskswitcher/server/inc/tsscreenshotprovider.h
taskswitcher/server/inc/tsservice.h
taskswitcher/server/inc/tsservicesprovider.h
taskswitcher/server/inc/tswindowgroupsmonitor.h
taskswitcher/server/inc/tswindowgroupsmonitorimp.h
taskswitcher/server/server.pro
taskswitcher/server/src/tsdatalist.cpp
taskswitcher/server/src/tsresourcemanagerimp.cpp
taskswitcher/server/src/tsrunningapp.cpp
taskswitcher/server/src/tsrunningappimp.cpp
taskswitcher/server/src/tsrunningappmodel.cpp
taskswitcher/server/src/tsrunningappserver.cpp
taskswitcher/server/src/tsrunningappstorage.cpp
taskswitcher/server/src/tsrunningappstorageimp.cpp
taskswitcher/server/src/tsscreenshotprovider.cpp
taskswitcher/server/src/tsservice.cpp
taskswitcher/server/src/tsservicesprovider.cpp
taskswitcher/server/src/tswindowgroupsmonitor.cpp
taskswitcher/server/src/tswindowgroupsmonitorimp.cpp
taskswitcher/sis/stubs/taskmonitor_stub.pkg
taskswitcher/sis/stubs/taskmonitor_stub.sis
taskswitcher/sis/taskmonitor.pkg
taskswitcher/taskswitcher.pro
taskswitcher/tsdevicedialogplugin/conf/tsdevicedialog.confml
taskswitcher/tsdevicedialogplugin/conf/tsdevicedialog_2002677F.crml
taskswitcher/tsdevicedialogplugin/inc/tsdataroles.h
taskswitcher/tsdevicedialogplugin/inc/tsdevicedialogcontainer.h
taskswitcher/tsdevicedialogplugin/inc/tsdevicedialogplugin.h
taskswitcher/tsdevicedialogplugin/inc/tsdocumentloader.h
taskswitcher/tsdevicedialogplugin/inc/tsentrymodelitem.h
taskswitcher/tsdevicedialogplugin/inc/tsmodel.h
taskswitcher/tsdevicedialogplugin/inc/tsmodelitem.h
taskswitcher/tsdevicedialogplugin/inc/tstasksgrid.h
taskswitcher/tsdevicedialogplugin/inc/tstasksgriditem.h
taskswitcher/tsdevicedialogplugin/resource/hbdialog.css
taskswitcher/tsdevicedialogplugin/resource/layout.docml
taskswitcher/tsdevicedialogplugin/resource/tstasksgriditem.css
taskswitcher/tsdevicedialogplugin/resource/tstasksgriditem.widgetml
taskswitcher/tsdevicedialogplugin/src/tsdevicedialogcontainer.cpp
taskswitcher/tsdevicedialogplugin/src/tsdevicedialogplugin.cpp
taskswitcher/tsdevicedialogplugin/src/tsdocumentloader.cpp
taskswitcher/tsdevicedialogplugin/src/tsmodel.cpp
taskswitcher/tsdevicedialogplugin/src/tsmodelitem.cpp
taskswitcher/tsdevicedialogplugin/src/tstasksgrid.cpp
taskswitcher/tsdevicedialogplugin/src/tstasksgriditem.cpp
taskswitcher/tsdevicedialogplugin/tsdevicedialogplugin.pro
taskswitcher/tsdevicedialogplugin/tsdevicedialogplugin.qrc
taskswitcher/utils/inc/tsentry.h
taskswitcher/utils/inc/tsidlist.h
taskswitcher/utils/inc/tsresourcemanager.h
taskswitcher/utils/inc/tsrunningapp.h
taskswitcher/utils/inc/tsrunningappstorage.h
taskswitcher/utils/inc/tsthumbnailobserver.h
taskswitcher/utils/inc/tswindowgroupsmonitor.h
taskswitcher/utils/inc/tswindowgroupsobserver.h
taskswitcher/utils/inc/tswindowgroupsobserverbase.h
taskswitcher/utils/src/tsentry.cpp
taskswitcher/utils/src/tsentrykeygenerator.cpp
taskswitcher/utils/src/tsidlist.cpp
taskswitcher/utils/src/tsresourcemanager.cpp
taskswitcher/utils/src/tsthumbnailprovider.cpp
taskswitcher/utils/src/tswindowgroupsobserver.cpp
taskswitcher/utils/src/tswindowgroupsobserverbase.cpp
tsdevicedialog/common.pri
tsdevicedialog/rom.pri
tsdevicedialog/rom/tsdevicedialog_core.iby
tsdevicedialog/rom/tsdevicedialog_resources.iby
tsdevicedialog/sis/buildSis.cmd
tsdevicedialog/sis/edit_pkg.pl
tsdevicedialog/sis/stubs/createstubs.bat
tsdevicedialog/sis/stubs/taskswitcher_stub.pkg
tsdevicedialog/sis/stubs/taskswitcher_stub.sis
tsdevicedialog/sis/taskswitcher.pkg
tsdevicedialog/tsdevicedialog.pro
tsdevicedialog/tsdevicedialogplugin/conf/tsdevicedialog.confml
tsdevicedialog/tsdevicedialogplugin/conf/tsdevicedialog_2002677F.crml
tsdevicedialog/tsdevicedialogplugin/inc/tsdataroles.h
tsdevicedialog/tsdevicedialogplugin/inc/tsdevicedialogcontainer.h
tsdevicedialog/tsdevicedialogplugin/inc/tsdevicedialogplugin.h
tsdevicedialog/tsdevicedialogplugin/inc/tsdocumentloader.h
tsdevicedialog/tsdevicedialogplugin/inc/tsentrymodelitem.h
tsdevicedialog/tsdevicedialogplugin/inc/tsmodel.h
tsdevicedialog/tsdevicedialogplugin/inc/tsmodelitem.h
tsdevicedialog/tsdevicedialogplugin/inc/tsnoitemslabel.h
tsdevicedialog/tsdevicedialogplugin/inc/tstasksgrid.h
tsdevicedialog/tsdevicedialogplugin/inc/tstasksgriditem.h
tsdevicedialog/tsdevicedialogplugin/resource/hbdialog.css
tsdevicedialog/tsdevicedialogplugin/resource/layout.docml
tsdevicedialog/tsdevicedialogplugin/resource/tstasksgriditem.css
tsdevicedialog/tsdevicedialogplugin/resource/tstasksgriditem.widgetml
tsdevicedialog/tsdevicedialogplugin/src/tsdevicedialogcontainer.cpp
tsdevicedialog/tsdevicedialogplugin/src/tsdevicedialogplugin.cpp
tsdevicedialog/tsdevicedialogplugin/src/tsdocumentloader.cpp
tsdevicedialog/tsdevicedialogplugin/src/tsmodel.cpp
tsdevicedialog/tsdevicedialogplugin/src/tsmodelitem.cpp
tsdevicedialog/tsdevicedialogplugin/src/tsnoitemslabel.cpp
tsdevicedialog/tsdevicedialogplugin/src/tstasksgrid.cpp
tsdevicedialog/tsdevicedialogplugin/src/tstasksgriditem.cpp
tsdevicedialog/tsdevicedialogplugin/tsdevicedialogplugin.pro
tsdevicedialog/tsdevicedialogplugin/tsdevicedialogplugin.qrc
--- a/activityfw/activityserviceplugin/activityserviceplugin.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/activityserviceplugin/activityserviceplugin.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -111,3 +111,6 @@
         "$${LITERAL_HASH}endif"
     MMP_RULES += defBlock
 }
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/activityfw/activityserviceplugin/src/afactivation.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/activityserviceplugin/src/afactivation.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -24,7 +24,10 @@
 {
     QSharedPointer<AfStorageProxy> connection(new AfStorageProxy());    
     QT_TRAP_THROWING(
-        User::LeaveIfError(connection->waitActivity());
+        if(!connection->waitActivity())
+        {
+            User::Leave(KErrGeneral);
+        }
     )
     
     d_ptr = new AfActivationPrivate(connection, this);
--- a/activityfw/afactivitylauncher/group/afactivitylauncher.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/afactivitylauncher/group/afactivitylauncher.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -45,3 +45,6 @@
 STATICLIBRARY  afstoragecommon.lib
 
 DEBUGLIBRARY    flogger.lib
+
+
+SMPSAFE
--- a/activityfw/orbitintegration/hbactivityplugin/hbactivityplugin.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/orbitintegration/hbactivityplugin/hbactivityplugin.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -38,3 +38,6 @@
     TARGET.EPOCALLOWDLLDATA = 1
     TARGET.CAPABILITY = ALL -TCB
 }
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/activityfw/rom.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/rom.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -15,6 +15,6 @@
 #
 
 BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"
-BLD_INF_RULES.prj_exports += "rom/activitymanager_core.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(activitymanager_core.iby)"
+BLD_INF_RULES.prj_exports += "rom/activitymanager_core.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(activitymanager_core.iby)"
 BLD_INF_RULES.prj_exports += "./sis/stubs/activitymanager_stub.sis  /epoc32/release/winscw/udeb/z/system/install/activitymanager_stub.sis"
 BLD_INF_RULES.prj_exports += "./sis/stubs/activitymanager_stub.sis  /epoc32/data/z/system/install/activitymanager_stub.sis"
\ No newline at end of file
--- a/activityfw/storage/client/group/client.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/client/group/client.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -42,3 +42,6 @@
 #ifdef ENABLE_ABIV2_MODE
 DEBUGGABLE_UDEBONLY
 #endif
+
+
+SMPSAFE
--- a/activityfw/storage/common/group/common.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/common/group/common.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -30,3 +30,6 @@
 #ifdef ENABLE_ABIV2_MODE
 DEBUGGABLE_UDEBONLY
 #endif
+
+
+SMPSAFE
--- a/activityfw/storage/common/inc/afcmd.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/common/inc/afcmd.h	Wed Oct 06 16:00:22 2010 +0300
@@ -28,7 +28,8 @@
 
 
 enum ActivityCmd {
-    RemoveActivity=0,
+    SaveActivity =0,
+    RemoveActivity,
     RemoveApplicationActivities,
     Activities,
     ApplicationActivities,
@@ -39,8 +40,7 @@
     GetData,
     NotifyChange,
     CancelWait,
-    CancelNotify,
-    SaveActivity
+    CancelNotify
 };
 
 #endif  //AFCMD_H
--- a/activityfw/storage/server/group/server.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/server/group/server.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -56,4 +56,6 @@
 
 #ifdef ENABLE_ABIV2_MODE
 DEBUGGABLE_UDEBONLY
-#endif
\ No newline at end of file
+#endif
+
+SMPSAFE
--- a/activityfw/storage/server/inc/afserver.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/server/inc/afserver.h	Wed Oct 06 16:00:22 2010 +0300
@@ -29,7 +29,7 @@
 
 class CAfStorage;
 
-class CAfServer : public CServer2,
+class CAfServer : public CPolicyServer,
                   public MAfTaskStorage
 {
 public:
--- a/activityfw/storage/server/src/afserver.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/server/src/afserver.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -21,17 +21,52 @@
 #include "afstorage.h"
 #include "aftask.h"
 #include "afapplicationsengine.h"
+#include "afcmd.h"
 
 _LIT( KActivityServerName, "hsactivitydbserver" );
 _LIT(KObserverAlreadyExists, "Observer task exists");
 
+
+
+const TInt KSecureServerRanges[] =
+    {
+    SaveActivity,
+    Activities,
+    ApplicationActivities, 
+    CancelNotify + 1
+    };
+
+const TUint8 KSecureServerElementsIndex[] =
+    {
+    0,
+    1,
+    CPolicyServer::EAlwaysPass,
+    CPolicyServer::ENotSupported
+    };
+
+const TInt KSecureServerRangeCount(sizeof(KSecureServerRanges) / sizeof(TInt));
+
+const CPolicyServer::TPolicyElement KSecureServerElements[] =
+    {
+    {_INIT_SECURITY_POLICY_C1(ECapabilityWriteDeviceData), CPolicyServer::EFailClient},
+    {_INIT_SECURITY_POLICY_C1(ECapabilityReadDeviceData ), CPolicyServer::EFailClient}
+    };
+
+const CPolicyServer::TPolicy KSecureServerPolicy =
+    {
+    CPolicyServer::EAlwaysPass,
+    KSecureServerRangeCount,
+    KSecureServerRanges,
+    KSecureServerElementsIndex,
+    KSecureServerElements
+   };
 // -----------------------------------------------------------------------------
 /**
  * Constructor for performing 1st stage construction
  */
 CAfServer::CAfServer()
 :
-CServer2( EPriorityStandard )
+CPolicyServer( EPriorityStandard, KSecureServerPolicy )
 {
     // No implementation required
 }
--- a/activityfw/storage/server/src/afsession.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/server/src/afsession.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -130,10 +130,6 @@
     case GetData:
         AfDataProviderTask::ExecuteL(*this,message);
         break;
-    
-    default:
-        message.Complete(CServer2::EBadMessageNumber);
-        break;
     }
 }
 
--- a/activityfw/storage/server/src/afstoragesynctask.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/activityfw/storage/server/src/afstoragesynctask.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -67,36 +67,47 @@
     CAfEntry *entry = CAfEntry::NewLC(msg);
     msg.ReadL(1, bitmapHdl);
 
-    TInt hdl = bitmapHdl();
-    if (0 >= hdl) {
-        User::Leave(KErrCorrupt);
-    }
+    const TBool isValidBitmapHdl( 0 < bitmapHdl() );
     CFbsBitmap *bitmap = new (ELeave) CFbsBitmap;
     CleanupStack::PushL(bitmap);
-    User::LeaveIfError(bitmap->Duplicate(hdl));
+    if( !isValidBitmapHdl )
+        {
+        if( !(entry->Flags() & CAfEntry::Invisible) )
+            {
+            User::Leave(KErrCorrupt);
+            }
+        }
+    else
+        {
+        User::LeaveIfError( bitmap->Duplicate( bitmapHdl() ) );
+        }
     
     //all data is retrieved. compleate message to improve response time
     msg.Complete(KErrNone);
     
     // trap all other leaving methods to prevent completing message in ServiceError
     TRAP_IGNORE(
-        RBuf thumbnailPath;
-        CleanupClosePushL(thumbnailPath);
         DeleteActivityScreenshotL(dataStorage, 
                         entry->ApplicationId(), 
                         entry->ActivityId());
         
-        dataStorage.ThumbnailPathL(thumbnailPath, 
-                       dataStorage.Fs(), 
-                       entry->ApplicationId(), 
-                       entry->ActivityId(),
-                       entry->Flags() & CAfEntry::Persistent);
-                       
-        User::LeaveIfError(bitmap->Save(thumbnailPath));
-
-        entry->SetImageSrcL(thumbnailPath);
+        if( isValidBitmapHdl ) 
+            {
+            RBuf thumbnailPath;
+            CleanupClosePushL(thumbnailPath);
+            
+            dataStorage.ThumbnailPathL(thumbnailPath, 
+                           dataStorage.Fs(), 
+                           entry->ApplicationId(), 
+                           entry->ActivityId(),
+                           entry->Flags() & CAfEntry::Persistent);
+                                   
+            User::LeaveIfError(bitmap->Save(thumbnailPath));
+            entry->SetImageSrcL(thumbnailPath);
+            CleanupStack::PopAndDestroy(&thumbnailPath);
+            }
+        
         dataStorage.SaveActivityL(*entry);
-        CleanupStack::PopAndDestroy(&thumbnailPath);
     )
     CleanupStack::PopAndDestroy(bitmap);
     CleanupStack::PopAndDestroy(entry);
--- a/common.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/common.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -76,7 +76,7 @@
 } else {
     # add platfrom API for windows
     INCLUDEPATH += \                
-                $$PWD/homescreensrv_plat/contentstorage_api \
+                $$PWD/homescreensrv_plat/contentstorage_api/inc \
                 $$PWD/homescreensrv_plat/hswidgetmodel_api \
                 $$PWD/homescreensrv_plat/homescreen_information_api/inc
 }
--- a/contentstorage/caclient/bwins/caclientu.def	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/bwins/caclientu.def	Wed Oct 06 16:00:22 2010 +0300
@@ -197,4 +197,5 @@
 	??_ECaService@@UAE@I@Z @ 196 NONAME ; CaService::~CaService(unsigned int)
 	?removeEntryFromGroup@CaService@@QBE_NHH@Z @ 197 NONAME ; bool CaService::removeEntryFromGroup(int, int) const
 	?index@CaItemModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 198 NONAME ; class QModelIndex CaItemModel::index(int, int, class QModelIndex const &) const
+	?removeAttribute@CaEntry@@QAEXABVQString@@@Z @ 199 NONAME ; void CaEntry::removeAttribute(class QString const &)
 
--- a/contentstorage/caclient/caclient.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/caclient.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -15,15 +15,15 @@
 #
 
 HEADERS += ./inc/*.h \
-    ./../homescreensrv_plat/contentstorage_api/caclient_global.h \
-    ./../homescreensrv_plat/contentstorage_api/cadefs.h \
-    ./../homescreensrv_plat/contentstorage_api/caentry.h \
-    ./../homescreensrv_plat/contentstorage_api/caicondescription.h \
-    ./../homescreensrv_plat/contentstorage_api/caitemmodel.h \
-    ./../homescreensrv_plat/contentstorage_api/camenuiconutility.h \
-    ./../homescreensrv_plat/contentstorage_api/canotifier.h \
-    ./../homescreensrv_plat/contentstorage_api/canotifierfilter.h \
-    ./../homescreensrv_plat/contentstorage_api/caquery.h \
-    ./../homescreensrv_plat/contentstorage_api/caservice.h
+    ./../homescreensrv_plat/contentstorage_api/inc/caclient_global.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/cadefs.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/caentry.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/caicondescription.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/caitemmodel.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/camenuiconutility.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/canotifier.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/canotifierfilter.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/caquery.h \
+    ./../homescreensrv_plat/contentstorage_api/inc/caservice.h
     
 SOURCES += ./src/*.cpp
--- a/contentstorage/caclient/caclient.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/caclient.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -57,9 +57,7 @@
         -lapgrfx \
         -lapparc \
         -lSatClient
-		
 
-		
 include(caclient_s60.pri)
 }
 
@@ -73,3 +71,6 @@
 include(caclient_stub.pri)
 include(installs_win32.pri)
 }
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/caclient/eabi/caclientu.def	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/eabi/caclientu.def	Wed Oct 06 16:00:22 2010 +0300
@@ -214,4 +214,5 @@
 	_ZTV21CaClientNotifierProxy @ 213 NONAME
 	_ZTV7CaEntry @ 214 NONAME
 	_ZTV9CaService @ 215 NONAME
+	_ZN7CaEntry15removeAttributeERK7QString @ 216 NONAME
 
--- a/contentstorage/caclient/inc/caentry_p.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/inc/caentry_p.h	Wed Oct 06 16:00:22 2010 +0300
@@ -60,7 +60,8 @@
     QMap<QString, QString> attributes() const;
     QString attribute(const QString &name) const;
     void setAttribute(const QString &name, const QString &value);
-
+    void removeAttribute(const QString &name);
+    
     HbIcon makeIcon(const QSizeF &size) const;
 
     EntryRole role() const;
--- a/contentstorage/caclient/src/caentry.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/src/caentry.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -403,6 +403,27 @@
 }
 
 /*!
+ Removes attribute.
+ \param name name of an attribute.
+
+ \code
+ ...
+ QString attrName_1( "name_1" );
+ QString attrValue_1( "value_1" );
+ QString attrName_2( "name_2" );
+ QString attrValue_2( "value_2" );
+ resultEntry->setAttribute( attrName_1, attrValue_1 );
+ resultEntry->setAttribute( attrName_2, attrValue_2 );
+ resultEntry->removeAttribute( attrName_2 );
+
+ \endcode
+ */
+void CaEntry::removeAttribute(const QString &name)
+{
+    m_d->removeAttribute(name);
+}
+
+/*!
  Creates an icon.
  \param  size icon size to display
  \retval created icon (HbIcon).
@@ -641,6 +662,14 @@
 }
 
 /*!
+ Removes attribute.
+ \param name name of an attribute.
+ */
+void CaEntryPrivate::removeAttribute(const QString &name)
+{
+    mAttributes.remove(name);
+}
+/*!
  Creates an icon.
  \param  size icon size to display
  \retval created icon (HbIcon).
--- a/contentstorage/caclient/src/caiconcache.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/src/caiconcache.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -153,7 +153,11 @@
 QString CaIconCache::key(const CaEntry &entry, const QSizeF &size)
 {
     QString key;
-    if (!entry.iconDescription().filename().isEmpty()) {
+    if (!entry.iconDescription().skinId().isEmpty()) {
+        key.append(entry.iconDescription().skinId());
+        key.append(separator);
+        key.append(entry.entryTypeName());
+    } else if (!entry.iconDescription().filename().isEmpty()) {
         key.append(entry.iconDescription().filename());
         key.append(separator);
         key.append(entry.entryTypeName());
@@ -161,8 +165,8 @@
         key.append(separator);
         key.append(entry.id());
     }
+    key.append(separator);
     if (size.isValid()) {
-        key.append(separator);
         key += QString::number(size.height());
         key.append(separator);
         key += QString::number(size.width());
--- a/contentstorage/caclient/src/caitemmodel.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/src/caitemmodel.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -16,7 +16,7 @@
  */
 
 #include <HbIcon>
-
+#include <HbParameterLengthLimiter>
 #include "caclient_defines.h"
 #include "caitemmodel.h"
 #include "caitemmodel_p.h"
@@ -489,8 +489,9 @@
             break;
         case CaItemModel::CollectionTitleRole:
             if (!pEntry->attribute(COLLECTION_TITLE_NAME).isNull()) {
-                variant = QVariant(pEntry->
-                    attribute(COLLECTION_TITLE_NAME).toUtf8());
+                variant = QVariant(
+                        HbParameterLengthLimiter(pEntry->attribute(COLLECTION_TITLE_NAME))
+                        .arg(this->rowCount()).arg(pEntry->text()));
             }
             else {
                 variant = QVariant(pEntry->text());
@@ -893,9 +894,9 @@
 {
     CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::removeItem");
     int row = mEntries.indexOf(id);
-    if (row >= 0) {
+    if (row >= 0 && rowCount() > 1) {
         m_q->beginRemoveRows(QModelIndex(), mEntries.indexOf(id),
-                             mEntries.indexOf(id));
+        mEntries.indexOf(id));
         mEntries.remove(id);
         m_q->endRemoveRows();
     } else {
@@ -1032,6 +1033,7 @@
             break;
     }
     emitEmpty(previousCount);
+    emitCountChange(previousCount);
     CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateModelItem");
 }
 
--- a/contentstorage/caclient/src/caservice.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/caclient/src/caservice.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -369,14 +369,7 @@
  */
 bool CaService::touch(const CaEntry &entry) const
 {
-    if (entry.flags() & RemovableEntryFlag &&
-        (entry.flags() & UsedEntryFlag) == 0 &&
-        entry.role() == ItemEntryRole &&
-        entry.entryTypeName() != QString(Hs::packageTypeName)) {
-        return m_d->touch(entry);
-    } else {
-    	return true;
-    }
+    return m_d->touch(entry);
 }
 
 /*!
@@ -1132,15 +1125,22 @@
 bool CaServicePrivate::touch(const CaEntry &entry)
 {
     qDebug() << "CaServicePrivate::touch" << "entryId: " << entry.id();
-
-    mErrorCode = mProxy->touch(entry);
-    if (mErrorCode == ServerTerminated) {
-        if (!mProxy->connect()) {
-            if (mNotifierProxy) {
-                mNotifierProxy->connectSessions();
+    
+    mErrorCode = NoErrorCode;
+    if (entry.flags() & RemovableEntryFlag &&
+        (entry.flags() & UsedEntryFlag) == 0 &&
+        entry.role() == ItemEntryRole &&
+        entry.entryTypeName() != QString(Hs::packageTypeName)) {
+           
+        mErrorCode = mProxy->touch(entry);
+        if (mErrorCode == ServerTerminated) {
+            if (!mProxy->connect()) {
+                if (mNotifierProxy) {
+                    mNotifierProxy->connectSessions();
+                }
+                mErrorCode = mProxy->touch(entry);
             }
-            mErrorCode = mProxy->touch(entry);
-        }
+        }        
     }
 
     qDebug() << "CaServicePrivate::touch mErrorCode:" << mErrorCode;
@@ -1368,14 +1368,13 @@
         return 0;
     }    
     
-    if (command == caCmdOpen) {
-        touch(entry);
-    }
-
     int errorCode = mCommandHandler->execute(entry, 
             command, receiver, member);
     mErrorCode = CaObjectAdapter::convertErrorCode(errorCode);
     
+    if (command == caCmdOpen) {
+        touch(entry);
+    }
 
     qDebug() << "CaServicePrivate::executeCommand mErrorCode on return:"
              << mErrorCode;
--- a/contentstorage/cahandler/app/app.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/cahandler/app/app.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -52,3 +52,6 @@
 }
 
 
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/cahandler/tapp/src/catapphandler.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/cahandler/tapp/src/catapphandler.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -41,7 +41,7 @@
  */
 CaTappHandler::CaTappHandler(QObject *parent)
 {
-	Q_UNUSED(parent);
+    Q_UNUSED(parent);
     mAiwMgr = new XQApplicationManager();
 }
 
--- a/contentstorage/cahandler/tapp/tapp.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/cahandler/tapp/tapp.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -47,3 +47,6 @@
 
 
 include(tapp.pri)
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/cahandler/url/url.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/cahandler/url/url.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -50,3 +50,6 @@
 }
 
 
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/camificonengine/camificonengine.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/camificonengine/camificonengine.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -57,4 +57,6 @@
 
 symbian:TARGET.UID3=0x2002DCF8
 
-include(camificonengine.pri)
\ No newline at end of file
+include(camificonengine.pri)
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/casatinterface/group/MenuInterface.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casatinterface/group/MenuInterface.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -36,3 +36,6 @@
 LIBRARY         euser.lib
 
 LANG			SC
+
+
+SMPSAFE
--- a/contentstorage/casoftwareregistry/casoftwareregistry.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casoftwareregistry/casoftwareregistry.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -14,6 +14,6 @@
 # Description:
 #
 
-HEADERS += ../../homescreensrv_plat/contentstorage_api/casoftwareregistry.h
-HEADERS += ../../homescreensrv_plat/contentstorage_api/cauninstallnotifier.h
+HEADERS += ../../homescreensrv_plat/contentstorage_api/inc/casoftwareregistry.h
+HEADERS += ../../homescreensrv_plat/contentstorage_api/inc/cauninstallnotifier.h
 SOURCES += ./src/*.cpp
--- a/contentstorage/casoftwareregistry/casoftwareregistry.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casoftwareregistry/casoftwareregistry.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -56,4 +56,6 @@
 INCLUDEPATH += ./stub/inc
 
 include(casoftwareregistry_stub.pri)
-}
\ No newline at end of file
+}
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/casoftwareregistry/s60/src/casoftwareregistry_p.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casoftwareregistry/s60/src/casoftwareregistry_p.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -293,7 +293,6 @@
         XQConversions::s60DescToQString(entry.Vendor());
 
     QString drives;
-    QString drv;
     TChar drive;
 
     const TInt driveListLen(entry.InstalledDrives().Length());
@@ -301,9 +300,8 @@
         if (entry.InstalledDrives()[i] != '\0') {
 
             if (!drives.isEmpty()) {
-                drives = drives.append(",");
+                drives = drives.append("\n");
             }
-            drv = QString(QChar('A'+ i)).append(":");
             if (DriveInfo::GetDefaultDrive(
                     DriveInfo::EDefaultPhoneMemory, drive ) == KErrNone
                     && QChar('A'+ i) == QChar(drive)) {
--- a/contentstorage/casoftwareregistry/src/casoftwareregistry.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casoftwareregistry/src/casoftwareregistry.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -18,8 +18,9 @@
 #include <QString>
 #include <QStringList>
 
-#include "cauninstallnotifier.h"
-#include "casoftwareregistry.h"
+#include <cauninstallnotifier.h>
+#include <casoftwareregistry.h>
+
 #include "casoftwareregistry_p.h"
 
 
--- a/contentstorage/casrv/caappscanner/group/caappscanner.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/caappscanner/group/caappscanner.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -56,3 +56,6 @@
 LIBRARY         efsrv.lib
 LIBRARY         platformenv.lib
 LIBRARY         scrclient.lib
+
+
+SMPSAFE
--- a/contentstorage/casrv/calocalizerscanner/calocalizerscanner.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/calocalizerscanner/calocalizerscanner.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -58,3 +58,6 @@
 
 
 
+
+
+symbian:MMP_RULES += SMPSAFE
Binary file contentstorage/casrv/calocalizerscanner/contentstorage.qm has changed
--- a/contentstorage/casrv/calocalizerscanner/contentstorage.ts	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/calocalizerscanner/contentstorage.ts	Wed Oct 06 16:00:22 2010 +0300
@@ -1,66 +1,97 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
+<TS version="2.0" language="en_GB" sourcelanguage="en_GB">
 <context>
-<message numerus="no" id="txt_applib_subtitle_office">
-    <comment>GroupBox widget, shows the label for the Office collection.</comment>        
-    <source>Office</source>
-    <translation variants="no">Office</translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
-    <extra-loc-viewid>applib_09</extra-loc-viewid>
-    <extra-loc-positionid>subtitle</extra-loc-positionid>
-    <extra-loc-feature>ap</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_applib_subtitle_games">
-    <comment>GroupBox widget, shows the label for the Games collection.</comment>        
-    <source>Games</source>
-    <translation variants="no">Games</translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
-    <extra-loc-viewid>applib_09</extra-loc-viewid>
-    <extra-loc-positionid>subtitle</extra-loc-positionid>
-    <extra-loc-feature>ap</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_applib_dblist_office">
-    <comment>List item primary text. Predefined collection for products that have more than 4 items to be grouped under &quot;Office&quot;.</comment>        
-    <source>Office</source>
-    <translation variants="no">Office</translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
-    <extra-loc-viewid>applib_03</extra-loc-viewid>
-    <extra-loc-positionid>dblist_1</extra-loc-positionid>
-    <extra-loc-feature>ap</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_applib_dblist_games">
-    <comment>List item primary text. Predefined collection for products that have more than 4 games preinstalled. </comment>        
-    <source>Games</source>
-    <translation variants="no">Games</translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
-    <extra-loc-viewid>applib_03</extra-loc-viewid>
-    <extra-loc-positionid>dblist_1</extra-loc-positionid>
-    <extra-loc-feature>ap</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_applib_dblist_downloaded">
-    <comment>List item primary text. Predefined, dynamic collection for post-installed applications. </comment>        
-    <source>Downloads</source>
-    <translation variants="no">Downloads</translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
-    <extra-loc-viewid>applib_03</extra-loc-viewid>
-    <extra-loc-positionid>dblist_1</extra-loc-positionid>
-    <extra-loc-feature>ap</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_applib_subtitle_downloads">
-    <comment>GroupBox widget, shows the label for the Downloads collection.</comment>        
-    <source>Downloads</source>
-    <translation variants="no">Downloads</translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
-    <extra-loc-viewid>applib_05</extra-loc-viewid>
-    <extra-loc-positionid>subtitle</extra-loc-positionid>
-    <extra-loc-feature>ap</extra-loc-feature>
-    <extra-loc-blank>False</extra-loc-blank>
-</message>
+    <name></name>
+    <message id="txt_applib_dblist_downloads">
+        <source>Recently added</source>
+        <comment>Primary list item widget, shows the label for the Recently added collection.</comment>
+        <translation>Recently added</translation>
+        <extra-loc-viewid>applib_005</extra-loc-viewid>
+        <extra-loc-positionid>dblist_1</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_dblist_games">
+        <source>Games</source>
+        <comment>List item primary text. Predefined collection for products that have more than 4 games preinstalled.</comment>
+        <translation>Games</translation>
+        <extra-loc-viewid>applib_003</extra-loc-viewid>
+        <extra-loc-positionid>dblist_1</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_dblist_office">
+        <source>Office</source>
+        <comment>List item primary text. Predefined collection for products that have more than 4 items to be grouped under &quot;Office&quot;.</comment>
+        <translation>Office</translation>
+        <extra-loc-viewid>applib_003</extra-loc-viewid>
+        <extra-loc-positionid>dblist_1</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_subtitle_downloads">
+        <source>Collections &gt; Recently added (%L1)</source>
+        <comment>GroupBox widget, shows the label for the Downloads collection.</comment>
+        <translation>Collections &gt; Recently added (%L1)</translation>
+        <extra-loc-viewid>applib_005</extra-loc-viewid>
+        <extra-loc-positionid>subtitle</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_subtitle_games">
+        <source>Collections &gt; Games (%L1)</source>
+        <comment>GroupBox widget, shows the label for the Games collection..</comment>
+        <translation>Collections &gt; Games (%L1)</translation>
+        <extra-loc-viewid>applib_009</extra-loc-viewid>
+        <extra-loc-positionid>subtitle</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_subtitle_office">
+        <source>Collections &gt; Office (%L1)</source>
+        <comment>GroupBox widget, shows the label for the Office collection.</comment>
+        <translation>Collections &gt; Office (%L1)</translation>
+        <extra-loc-viewid>applib_009</extra-loc-viewid>
+        <extra-loc-positionid>subtitle</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_dblist_essentials">
+        <source>Essentials</source>
+        <comment>Primary list item widget, shows the label for the Essentials collection.</comment>
+        <translation>Essentials</translation>
+        <extra-loc-viewid>applib_003</extra-loc-viewid>
+        <extra-loc-positionid>dblist_1</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_subtitle_essentials">
+        <source>Collections &gt; Essentials (%L1)</source>
+        <comment>GroupBox widget, shows the label for the Essentials collection.</comment>
+        <translation>Collections &gt; Essentials (%L1)</translation>
+        <extra-loc-viewid>applib_009</extra-loc-viewid>
+        <extra-loc-positionid>subtitle</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
+    <message id="txt_applib_subtitle_collections_user">
+        <source>Collections &gt; %2 (%L1)</source>
+        <comment>GroupBox widget, shows the label for the user-created collection. %2 is the name of the collection and %L1 is the number of applications.</comment>
+        <translation>Collections &gt; %2 (%L1)</translation>
+        <extra-loc-viewid>applib_009</extra-loc-viewid>
+        <extra-loc-positionid>subtitle</extra-loc-positionid>
+        <extra-loc-feature>app</extra-loc-feature>
+        <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+        <extra-loc-blank>False</extra-loc-blank>
+    </message>
 </context>
 </TS>
--- a/contentstorage/casrv/casatmonitor/group/casatmonitor.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/casatmonitor/group/casatmonitor.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -53,3 +53,6 @@
 LIBRARY         camenu.lib
 LIBRARY         bafl.lib
 LIBRARY         estor.lib
+
+
+SMPSAFE
--- a/contentstorage/casrv/casrvmgr/group/casrvmanager.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/casrvmgr/group/casrvmanager.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -38,3 +38,6 @@
 DEBUGLIBRARY  flogger.lib
 
 // End of File
+
+
+SMPSAFE
--- a/contentstorage/casrv/causifscanner/group/causifscanner.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/causifscanner/group/causifscanner.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -53,3 +53,6 @@
 LIBRARY     camenu.lib
 LIBRARY     bafl.lib
 LIBRARY     efsrv.lib
+
+LIBRARY		PlatformEnv.lib
+SMPSAFE
--- a/contentstorage/casrv/causifscanner/src/causifscanner.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/causifscanner/src/causifscanner.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -18,6 +18,7 @@
 #include <e32property.h>
 #include <f32file.h>
 #include <badesca.h>
+#include <driveinfo.h>
 
 #include "causifscanner.h"
 #include "cainnerentry.h"
@@ -162,7 +163,48 @@
     if( aEntry->IsRemovable() )
         {
         aCaEntry->SetFlags( aCaEntry->GetFlags() | ERemovable );
+        
+        TChar drive;
+        RBuf drives;        
+        drives.CreateL(KMaxFileName);
+        CleanupClosePushL( drives );
+        const TInt driveListLen(aEntry->InstalledDrives().Length());
+        for (TInt i( 0 ); i < driveListLen; ++i) 
+            {
+            // Skip PhoneMemory and if we have some icon resolved
+            if (aEntry->InstalledDrives()[i] != '\0' && drives.Length() == 0
+                    && (DriveInfo::GetDefaultDrive(
+                            DriveInfo::EDefaultPhoneMemory, drive ) == KErrNone
+                            && TChar('A'+ i) != TChar(drive)))
+                {
+                TUint drvStatus( 0 );
+                int err = DriveInfo::GetDriveStatus( iFs, i, drvStatus );
+                if ( ( drvStatus & DriveInfo::EDriveInternal ) &&
+                     ( drvStatus & DriveInfo::EDriveExternallyMountable ) ){
+                    // Mass Storage
+                    drives.Append(_L("qtg_mono_hard_disk"));
+                    }
+                else if(drvStatus & DriveInfo::EDriveRemote ||
+                        drvStatus & DriveInfo::EDriveUsbMemory)
+                    {
+                    // Usb or remote drive
+                    drives.Append(_L("qtg_mono_usb"));
+                    }
+                else if( ( drvStatus & DriveInfo::EDriveRemovable ) &&
+                     ( drvStatus & DriveInfo::EDriveExternallyMountable ) )
+                    {
+                    // MMC
+                    drives.Append(_L("qtg_mono_memory_in_use"));
+                    }
+                }
+            }
+        if (drives.Length() > 0) {
+            aCaEntry->AddAttributeL( KCaAttrDrivesIconIds, drives );
         }
+        CleanupStack::PopAndDestroy( &drives );
+        }
+
+    
     // entries obtained with usif should have component id.
     //it's needed for uninstalling
     RBuf compIdDesc;
@@ -367,3 +409,4 @@
     iStorageProxy.RemoveL( entriesId );
     CleanupStack::PopAndDestroy( &entriesId );
     }
+
--- a/contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -67,3 +67,6 @@
 
 
 // End of file
+
+
+SMPSAFE
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h	Wed Oct 06 16:00:22 2010 +0300
@@ -236,8 +236,6 @@
             const TDesC & aPackageUid,
             TChar& aDrive ) const;
 
-
-
 private:
     // Data  
 
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetstoragehandler.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetstoragehandler.h	Wed Oct 06 16:00:22 2010 +0300
@@ -150,6 +150,18 @@
     void UpdateCompIdAndRemovableFlagL( const TDesC& aManifestFilePathName,
             CCaInnerEntry& aEntry ) const;
 
+    /**
+     * Make not empty collections with not hidden items visible.
+     */
+    void MakeNotEmptyCollectionsVisibleL();
+    
+    /**
+     * Make collection visible if it has visible entry.
+     * @param aEntry a collection entry.
+     */
+    void MakeCollectionVisibleIfHasVisibleEntryL(
+            CCaInnerEntry* aEntry );
+
 private:
     // Data
 
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -163,7 +163,7 @@
 //
 CCaWidgetDescription *CCaWidgetDescription::CloneL()
     {   
-    CCaWidgetDescription* clone = CCaWidgetDescription::NewL();
+    CCaWidgetDescription* clone = CCaWidgetDescription::NewLC();
     
     clone->SetPathL( GetPath() );
     clone->SetMmcIdL( GetMmcId() );
@@ -181,6 +181,7 @@
     clone->SetServiceXmlL( GetServiceXml() );
     clone->SetManifestFilePathNameL( GetManifestFilePathName() );
     
+    CleanupStack::Pop( clone );
     return clone;
     }
 
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -109,8 +109,6 @@
             ScanOnDriveL( currentDriveLetter );
             }
         }
-    
-    
     return iWidgets;
     }
 
@@ -204,8 +202,8 @@
                 }
             else
                 {
-                TRAP_IGNORE( ParseManifestFileL( manifestFilePathName, aDirectoryName,
-                                aDrive ) );
+                TRAP_IGNORE( ParseManifestFileL(
+                    manifestFilePathName, aDirectoryName, aDrive ) );
                 }
             CleanupStack::PopAndDestroy( &manifestFilePathName );
             }
@@ -297,7 +295,7 @@
             }
         CleanupStack::PopAndDestroy( &childElementList );
 
-        //set path for hs to use, trim last 2 chars (doubleslash)
+        // Set path for hs to use, trim the last character (backslash).
         HBufC *libraryPath = GetManifestDirectoryPathLC( aPackageUid, aDrive );
         widgetDescriptor->SetPathL(libraryPath->Mid(0,libraryPath->Length()-1));
         CleanupStack::PopAndDestroy(libraryPath);
@@ -773,5 +771,4 @@
     return result;
     }
 
-
 //  End of File
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -103,6 +103,7 @@
     FetchWidgetsL();
     AddWidgetsL( iParser->WidgetsScanL( iWidgetDBCache ) );
     RemoveWidgetsL();
+    MakeNotEmptyCollectionsVisibleL();
     }
 
 // ----------------------------------------------------------------------------
@@ -368,7 +369,6 @@
 //
 // ----------------------------------------------------------------------------
 //
-
 void CCaWidgetStorageHandler::SetLocalizationsL(
         const CCaWidgetDescription* aWidget, TInt aEntryId )
     {
@@ -415,7 +415,6 @@
 //
 // ----------------------------------------------------------------------------
 //
-
 void CCaWidgetStorageHandler::UpdateCompIdAndRemovableFlagL(
         const TDesC& aManifestFilePathName, CCaInnerEntry& aEntry ) const
     {
@@ -462,4 +461,61 @@
     CleanupStack::PopAndDestroy( &componentIds );
     }
 
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void CCaWidgetStorageHandler::MakeNotEmptyCollectionsVisibleL()
+    {
+    RPointerArray<CCaInnerEntry> resultArray;
+    CleanupResetAndDestroyPushL( resultArray );
+    CCaInnerQuery* hiddenCollectionsQuery = CCaInnerQuery::NewLC();
+    CDesC16ArrayFlat* entryType = new ( ELeave ) CDesC16ArrayFlat(
+            KGranularityOne );
+    CleanupStack::PushL( entryType );
+    entryType->AppendL( KCaTypeCollection );
+    hiddenCollectionsQuery->SetEntryTypeNames( entryType );
+    hiddenCollectionsQuery->SetFlagsOff( EVisible );
+    iStorage->GetEntriesL( hiddenCollectionsQuery, resultArray );
+    CleanupStack::Pop( entryType );
+    CleanupStack::PopAndDestroy( hiddenCollectionsQuery );
+    if( resultArray.Count()>0 )
+        {
+        for( TInt i=0; i<resultArray.Count(); i++ )
+            {
+            // for any not visible collection
+            MakeCollectionVisibleIfHasVisibleEntryL( resultArray[i] );
+            }
+        }
+    CleanupStack::PopAndDestroy( &resultArray );
+   }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+void CCaWidgetStorageHandler::MakeCollectionVisibleIfHasVisibleEntryL(
+        CCaInnerEntry* aEntry )
+    {
+    RPointerArray<CCaInnerEntry> resultEntriesArray;
+    CleanupResetAndDestroyPushL( resultEntriesArray );
+    CCaInnerQuery* visibleEntriesQuery = CCaInnerQuery::NewLC();
+    visibleEntriesQuery->SetParentId( aEntry->GetId() );
+    visibleEntriesQuery->SetFlagsOn( EVisible );
+    visibleEntriesQuery->SetFlagsOff( EMissing );
+    iStorage->GetEntriesL( visibleEntriesQuery, resultEntriesArray );
+    if( resultEntriesArray.Count()>0 )
+        {
+        // set collection visible if hidden
+        if( !( aEntry->GetFlags() & EVisible ) )
+            {
+            aEntry->SetFlags( aEntry->GetFlags() | EVisible );
+            // update here this collection
+            iStorage->AddL( aEntry );
+            }
+        }
+    CleanupStack::PopAndDestroy( visibleEntriesQuery );
+    CleanupStack::PopAndDestroy( &resultEntriesArray );
+    }
+
 //  End of File
--- a/contentstorage/castorage/conf/castoragedb_templates/castoragedb_variant.sql	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/castorage/conf/castoragedb_templates/castoragedb_variant.sql	Wed Oct 06 16:00:22 2010 +0300
@@ -45,24 +45,24 @@
         {%- set LocalizeNames = false -%}
         {%- if Collections == "Collections" -%}
             {%- set LocalizeNames = feat_tree.CaStorageDbSetting[Collections].LocalizeNames._value[col] or false -%}
-            {%- set TranslationFile = feat_tree.CaStorageDbSetting[Collections].TranslationFile._value[col]|string|reverse|replace('_','',1)|reverse~'_' or ''-%}
-        {%- endif %}
+            {%- set TranslationFile = feat_tree.CaStorageDbSetting[Collections].TranslationFile._value[col] or '' -%}
+            {%- if TranslationFile != "" -%}
+                {%- set TranslationFile = TranslationFile~'_' -%}
+            {%- endif -%}
+        {%- endif -%}
         {%- set IconFileName = feat_tree.CaStorageDbSetting[Collections].Icon.localPath._value[col] or '' -%}
         {%- set IconSkinId = feat_tree.CaStorageDbSetting[Collections].IconSkinId._value[col] or '' -%}
         {%- if IconFileName != "" -%}
             {%- set IconFileName = stripPath(IconFileName) -%}
-        {%- endif %}
+        {%- endif -%}
         {%- if ShortName == "" -%}
             {%- set ShortName = Name -%}
-        {%- endif %}
-        {%- if TitleName == "" -%}
-            {%- set TitleName = Name -%}
-        {%- endif %}
+        {%- endif -%}
         {%- if GroupName == "" -%}
             {%- set GroupName = Name -%}
-        {%- endif %}        
-    INSERT INTO COLLECTION (COLLECTION_NAME, COL_APP_GROUP_NAME, FLAGS,  COL_TITLE_NAME {% if LocalizeNames -%}, TRANSLATION_FILE{%- endif %}, COL_SHORT_NAME, ICON_FILENAME, ICON_SKIN_ID) 
-    VALUES ( '{{Name}}', '{{GroupName}}', {% if Locked -%} 0 {% else %} 4 {%- endif %}, "{{TitleName}}"{% if LocalizeNames -%}, "{{TranslationFile}}"{%- endif %}, "{{ShortName}}", "{{IconFileName}}", "{{IconSkinId}}");
+        {%- endif -%}        
+    INSERT INTO COLLECTION (COLLECTION_NAME, COL_APP_GROUP_NAME, FLAGS{%- if TitleName -%},  COL_TITLE_NAME{%- endif %} {% if LocalizeNames -%}, TRANSLATION_FILE{%- endif %}, COL_SHORT_NAME, ICON_FILENAME, ICON_SKIN_ID) 
+    VALUES ( '{{Name}}', '{{GroupName}}', {% if Locked -%} 0 {% else %} 4 {%- endif %}{%- if TitleName -%}, "{{TitleName}}"{%- endif %}{% if LocalizeNames -%}, "{{TranslationFile}}"{%- endif %}, "{{ShortName}}", "{{IconFileName}}", "{{IconSkinId}}");
     {% endfor %}
 {%- endmacro %}
 
--- a/contentstorage/castorage/data/castoragedb_create.sql	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/castorage/data/castoragedb_create.sql	Wed Oct 06 16:00:22 2010 +0300
@@ -211,8 +211,8 @@
       ( (IC_FILENAME = "" AND IC_SKIN_ID = "") OR 
         (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON_FILENAME AND IC_SKIN_ID = new.ICON_SKIN_ID AND ICON_ID <> last_insert_rowid()) IS NOT NULL);
   -- INSERT ENTRY
-  INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_ICON_ID ) 
-  VALUES ( new.ITEM_NAME, 1, "widget", (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON_FILENAME AND IC_SKIN_ID = new.ICON_SKIN_ID ));
+  INSERT OR IGNORE INTO CA_ENTRY (EN_TEXT, EN_ROLE, EN_TYPE_NAME, EN_FLAGS, EN_ICON_ID ) 
+  VALUES ( new.ITEM_NAME, 1, "widget", 0, (SELECT ICON_ID FROM CA_ICON WHERE IC_FILENAME = new.ICON_FILENAME AND IC_SKIN_ID = new.ICON_SKIN_ID ));
   -- INSERT ATTRIBUTES
   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 ) ,"packageuid",new.PACKAGE_UID);
--- a/contentstorage/castorage/group/castorage.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/castorage/group/castorage.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -44,3 +44,6 @@
 DEBUGLIBRARY    flogger.lib
 
 
+
+
+SMPSAFE
--- a/contentstorage/cautils/cautils.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/cautils/cautils.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -40,3 +40,6 @@
 CONFIG -= stl
 include(cautils.pri)
 }
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/contentstorage/group/camenu.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/group/camenu.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:
-*  Version     : %version: 19.1.12 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: 19.1.13 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -72,3 +72,6 @@
 LIBRARY		HbCore.lib
 
 
+
+
+SMPSAFE
--- a/contentstorage/group/camenusrv.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/group/camenusrv.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -43,3 +43,6 @@
 LIBRARY         cautils.lib
 
 
+
+
+SMPSAFE
--- a/contentstorage/inc/cadef.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/inc/cadef.h	Wed Oct 06 16:00:22 2010 +0300
@@ -12,7 +12,7 @@
  * Contributors:
  *
  * Description:  Definition of different constants
- *  Version     : %version: 10.1.28 % << Don't touch! Updated by Synergy at check-out.
+ *  Version     : %version: 10.1.30 % << Don't touch! Updated by Synergy at check-out.
  *
  */
 
@@ -85,6 +85,7 @@
 _LIT( KCaAttrAppTypeValueCWRT, "cwrt");
 _LIT( KCaAttrAppTypeValueNative, "native");
 _LIT( KCaAttrComponentId, "component_id" );
+_LIT( KCaAttrDrivesIconIds, "drivesIconIds");
 _LIT( KCaAttrAppSettingsPlugin, "app_settings_plugin");
 _LIT( KCaScrPropertyAppSettings, "settingsName");
 _LIT( KPreviewImageAttrName, "preview_image_name" );
@@ -110,6 +111,10 @@
 _LIT( KLocalizationEnDescription, "EN_DESCRIPTION" );
 const TInt charsToFilename= 6;  // <loc://> loc://email/qtn_gmail_mail_account
 
+_LIT( KCaQmFile, "contentstorage_" );//default content storage qm file
+//Defaul localize string for collection
+_LIT( KDefaultLocTitleName, "txt_applib_subtitle_collections_user" );
+
 
 const TInt KGranularityOne = 1;
 const TInt KUidChars = 10;
@@ -160,6 +165,7 @@
 // Menu clients always need to check that the necessary attributes are present.
 //
 _LIT( KCaAttrShortName, "short_name" ); ///< Short name.
+_LIT( KCaAttrTitleName, "title_name" ); ///< Title name.
 _LIT( KCaComponentId, "component_id" ); ///< Component Id.
 
 // Built-in types and attributes.
--- a/contentstorage/srvinc/castorageproxy.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/srvinc/castorageproxy.h	Wed Oct 06 16:00:22 2010 +0300
@@ -201,7 +201,9 @@
     
     CCaLocalizationEntry* LocalizeDescriptionL( CCaInnerEntry* aEntry );
     
-    TBool InitializeTranslatorL( TDesC& aQmFilename );
+    void AddTitleNameL( CCaInnerEntry* aEntry );
+    
+    TBool InitializeTranslatorL( const TDesC& aQmFilename );
 
 private:
     //Data
@@ -215,6 +217,11 @@
      * Sessions using this engine. Own.
      */
     RPointerArray<MCaSessionNorifier> iHandlerNotifier;
+
+    /**
+     * Translated user collection name. Own.
+     */
+    RBuf iTitleUserColName;
     
     CA_STORAGE_TEST_FRIEND_CLASS( TestCaClient )
     
--- a/contentstorage/srvsrc/castorageproxy.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/contentstorage/srvsrc/castorageproxy.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -75,6 +75,7 @@
 //
 CCaStorageProxy::~CCaStorageProxy()
     {
+    iTitleUserColName.Close();
     delete iStorage;
     iHandlerNotifier.Close();
     }
@@ -87,6 +88,17 @@
         RPointerArray<CCaInnerEntry>& aResultContainer )
     {
     iStorage->GetEntriesL( aQuery, aResultContainer );
+    if( aResultContainer.Count() == 1 
+            && aResultContainer[0]->
+            GetEntryTypeName().Compare( KCaTypeCollection ) == KErrNone )
+        {
+        TPtrC titleName;
+        if( !aResultContainer[0]->FindAttribute( KCaAttrTitleName, titleName ) )
+            {
+            AddTitleNameL( aResultContainer[0] );
+            }
+        }
+    
     }
 
 // ---------------------------------------------------------------------------
@@ -454,7 +466,7 @@
     {
 	CCaLocalizationEntry* result = NULL;
 	TInt textLength = aEntry->GetText().Length();
-	if (textLength > 0)
+	if( textLength > 0 )
 		{
 		TChar delimiter = '/'; // cannot add it as global
 		RBuf title;
@@ -464,12 +476,14 @@
 		if ( pos > 0 && pos + 1 < textLength )   // 1 is for delimiters
 			{
 			TPtrC16 logString = title.Mid( pos + 1 ); 
-			TInt qmFileNameLength = textLength - charsToFilename - 1 - logString.Length();
+			TInt qmFileNameLength = 
+			        textLength - charsToFilename - 1 - logString.Length();
 			TPtrC16 qmFile = title.Mid( charsToFilename, qmFileNameLength );
 			if ( InitializeTranslatorL( qmFile ) )
 				{
 			    result = CCaLocalizationEntry::NewLC();			
-				HBufC* translatedString = HbTextResolverSymbian::LoadLC( logString );
+				HBufC* translatedString = 
+				        HbTextResolverSymbian::LoadLC( logString );
 				if ( translatedString->Compare( logString ) )
 					{
 					result->SetStringIdL( logString );
@@ -505,7 +519,7 @@
     {
 	CCaLocalizationEntry* result = NULL;
 	TInt dscLength = aEntry->GetDescription().Length();
-	if ( dscLength )
+	if( dscLength )
 		{
 		TChar delimiter = '/'; // cannot add it as global
 		RBuf description;
@@ -551,7 +565,32 @@
 //
 // ---------------------------------------------------------
 //
-TBool CCaStorageProxy::InitializeTranslatorL( TDesC& aQmFilename )
+void CCaStorageProxy::AddTitleNameL( CCaInnerEntry* aEntry )
+    {
+    if( !iTitleUserColName.Length() )
+        {
+        if ( InitializeTranslatorL( KCaQmFile ) )
+            {
+            HBufC* translatedString = 
+                    HbTextResolverSymbian::LoadLC( KDefaultLocTitleName );
+            if ( translatedString->Compare( KDefaultLocTitleName ) )
+                {
+                iTitleUserColName.CreateL( *translatedString );
+                }
+            CleanupStack::PopAndDestroy( translatedString );
+            }
+        }
+    if( iTitleUserColName.Length() )
+        {
+        aEntry->AddAttributeL( KCaAttrTitleName, iTitleUserColName );
+        }
+    }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TBool CCaStorageProxy::InitializeTranslatorL( const TDesC& aQmFilename )
     {
 	TBool result = HbTextResolverSymbian::Init( aQmFilename, KLocalizationFilepathC );
 	if ( !result )
@@ -560,6 +599,7 @@
 		TChar currentDriveLetter;
 		TDriveList driveList;
 		RFs fs;
+		CleanupClosePushL( fs );
 		User::LeaveIfError( fs.Connect() );
 		User::LeaveIfError( fs.DriveList( driveList ) );
 
@@ -583,7 +623,7 @@
 			path.Zero();
 			}
 		CleanupStack::PopAndDestroy( &path );
-		fs.Close();
+		CleanupStack::PopAndDestroy( &fs );
 		
 		if( !result )
 			{
--- a/homescreensrv.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/homescreensrv.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -23,7 +23,6 @@
 symbian:SUBDIRS += activityfw
 symbian:SUBDIRS += taskswitcher
 symbian:SUBDIRS += hsappkeyhandler
-symbian:SUBDIRS += tsdevicedialog
 
 exists(tsrc/tsrc.pro): SUBDIRS  += tsrc
 
--- a/homescreensrv_plat/activity_framework_api/afactivities_global.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/homescreensrv_plat/activity_framework_api/afactivities_global.h	Wed Oct 06 16:00:22 2010 +0300
@@ -19,6 +19,7 @@
 #define AFACTIVITIES_GLOBAL_H
 
 #include <qglobal.h>
+#include <qmetatype.h>
 
 #ifdef AFACTIVITIES_LIB
     #define AFACTIVITIES_EXPORT Q_DECL_EXPORT
@@ -43,4 +44,6 @@
     const char KActivityUriBackgroundKey[] = "activityinbackground";
 }
 
+Q_DECLARE_METATYPE( Af::ActivationReason )
+
 #endif // AFACTIVITIES_GLOBAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/mocks/inc/afstorageclient.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,88 @@
+/*
+* 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 AFSTORAGECLIENT_H
+#define AFSTORAGECLIENT_H
+
+#include <e32base.h>
+
+class CAfEntry;
+class MAfAsyncRequestObserver;
+
+class CAfStorageClient : public CBase
+{
+public:
+    static CAfStorageClient *NewL(MAfAsyncRequestObserver &observer);
+    virtual ~CAfStorageClient();
+
+private:
+    CAfStorageClient(MAfAsyncRequestObserver &observer);
+    
+public:    
+    int saveActivity(const CAfEntry &entry, TInt imageHandle);
+    int removeActivity(const CAfEntry &entry);
+    int removeApplicationActivities(const CAfEntry &entry);
+    int activities(RPointerArray<CAfEntry> &dst, int limit = 0);
+    int applicationActivities(RPointerArray<CAfEntry> &dst, const CAfEntry &entry);
+    int activityData(CAfEntry *&dst, const CAfEntry &entry);
+    int waitActivity();
+    int launchActivity(const CAfEntry &entry);
+    int getThumbnail(const TDesC &imagePath, void *userData);
+    int notifyDataChange();
+
+private:
+    MAfAsyncRequestObserver &mObserver;
+    
+private:
+    void updateLastEntry(const CAfEntry &entry);
+    
+public:
+    void invokeWaitActivityCallback(int result, const TDesC8 &data);
+    void invokeGetThumbnailCallback(int result, int bitmapHandle, void *userData);
+    void invokeDataChangeCallback(int result);
+    
+    static void clearLastCallInfo();
+    
+public:
+    enum LastMethodCalled {
+        NoCall,
+        SaveActivityMethod,
+        RemoveActivityMethod,
+        RemoveApplicationActivitiesMethod,
+        ActivitiesMethod,
+        ApplicationActivitiesMethod,
+        ActivityDataMethod,
+        WaitActivityMethod,
+        LaunchActivityMethod,
+        GetThumbnailMethod,
+        NotifyDataChangeMethod,
+    };
+    
+public:
+    static TInt constructorError;
+    static TInt expectedReturnCode;
+
+    static CAfEntry *lastCallEntry;
+    static TInt lastCallImageHandle;
+    static TSize lastCallThumbnailSize;
+    static HBufC *lastCallThumbnailPath;
+    static void *lastCallUserData;
+    
+    static LastMethodCalled lastMethodCalled;
+};
+
+#endif //AFSTORAGECLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/mocks/inc/afstorageproxy.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* 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 AFSTORAGEPROXY_H
+#define AFSTORAGEPROXY_H
+
+#include <QObject>
+#include <QVariant>
+#include <QStringList>
+
+class AfStorageProxy : public QObject
+{
+    Q_OBJECT
+
+public:
+    AfStorageProxy(QObject *parent = 0);
+    virtual ~AfStorageProxy();
+
+public:    
+    bool saveActivity(int applicationId, const QString &activityId, const QString &customActivityName, const QVariant &activityData, const QVariantHash &metadata, const QPixmap &screenshot);
+    bool removeActivity(int applicationId, const QString &activityId);   
+    bool removeApplicationActivities(int applicationId);
+    bool activities(QList<QVariantHash> &list, int limit = 0);
+    bool applicationActivities(QStringList &list, int applicationId);
+    bool activityData(QVariant &data, int applicationId, const QString &activityId);
+    bool activityMetaData(QVariantHash &metadata, int applicationId, const QString &activityId);
+    bool waitActivity();    
+    bool launchActivity(int applicationId, const QString &activityUri);
+    bool getThumbnail(const QString &imagePath, void *userData);
+    bool notifyDataChange();
+
+signals:
+    void activityRequested(const QString &activityUri);
+    void thumbnailRequested(const QPixmap &thumbnailPixmap, void *userData);
+    void dataChanged();
+    
+public: // additional mocked implementation members
+    void emitActivityRequested(const QString &activityUri);
+    
+    QVariantHash mLastCallParams;
+    //for generating leave in afactivattion
+    static bool waitFailed;
+    static AfStorageProxy *instance;
+};
+
+#endif //AFSTORAGEPROXY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/mocks/inc/applicationlauncher_p.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* 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 APPLICATIONLAUNCHER_P_H
+#define APPLICATIONLAUNCHER_P_H
+
+#include <QVariantHash>
+#include <QUrl>
+
+class ApplicationLauncherPrivate
+{
+
+public:
+    ApplicationLauncherPrivate();
+    ~ApplicationLauncherPrivate();
+
+public:
+    static ApplicationLauncherPrivate *instance;
+    static bool isRunningReturnValue;
+
+public:
+    bool isRunning(int applicationId);
+    void startApplication(int applicationId, const QUrl &uri);
+    void bringToForeground(int applicationId);
+
+public:
+    QList<QVariantHash> isRunningCalls;
+    QList<QVariantHash> startApplicationCalls;
+    QList<QVariantHash> bringToForegroundCalls;
+
+};
+
+#endif // APPLICATIONLAUNCHER_P_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/mocks/src/afstorageclient.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,202 @@
+/*
+* 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 "afstorageclient.h"
+
+#include <afentry.h>
+#include <afasyncrequestobserver.h>
+#include <fbs.h>
+
+TInt CAfStorageClient::constructorError(KErrNone);
+TInt CAfStorageClient::expectedReturnCode(KErrNone);
+
+CAfEntry *CAfStorageClient::lastCallEntry(0);
+TInt CAfStorageClient::lastCallImageHandle(0);
+TSize CAfStorageClient::lastCallThumbnailSize(0, 0);
+HBufC *CAfStorageClient::lastCallThumbnailPath(0);
+void *CAfStorageClient::lastCallUserData(0);
+CAfStorageClient::LastMethodCalled CAfStorageClient::lastMethodCalled = CAfStorageClient::NoCall;
+    
+CAfStorageClient *CAfStorageClient::NewL(MAfAsyncRequestObserver &observer)
+{
+    User::LeaveIfError(CAfStorageClient::constructorError);
+    return new CAfStorageClient(observer);
+}
+
+CAfStorageClient::~CAfStorageClient()
+{
+    clearLastCallInfo();
+}
+
+CAfStorageClient::CAfStorageClient(MAfAsyncRequestObserver &observer) : mObserver(observer)
+{
+}
+
+int CAfStorageClient::saveActivity(const CAfEntry &entry, TInt imageHandle)
+{
+    lastMethodCalled = CAfStorageClient::SaveActivityMethod;
+    updateLastEntry(entry);
+    lastCallImageHandle = imageHandle;
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::removeActivity(const CAfEntry &entry)
+{
+    lastMethodCalled = CAfStorageClient::RemoveActivityMethod;
+    updateLastEntry(entry);
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::removeApplicationActivities(const CAfEntry &entry)
+{
+    lastMethodCalled = CAfStorageClient::RemoveApplicationActivitiesMethod;
+    updateLastEntry(entry);
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::activities(RPointerArray<CAfEntry> &dst, int /*limit*/)
+{
+    if (lastMethodCalled == CAfStorageClient::SaveActivityMethod && CAfStorageClient::lastCallEntry) {
+        dst.Append(CAfStorageClient::lastCallEntry);
+        CAfStorageClient::lastCallEntry =0;
+    }
+    lastMethodCalled = CAfStorageClient::ActivitiesMethod;
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::applicationActivities(RPointerArray<CAfEntry> &dst, const CAfEntry &entry)
+{
+    if (lastMethodCalled == CAfStorageClient::SaveActivityMethod && CAfStorageClient::lastCallEntry) {
+        dst.Append(CAfStorageClient::lastCallEntry);
+        CAfStorageClient::lastCallEntry =0;
+    }
+    lastMethodCalled = CAfStorageClient::ApplicationActivitiesMethod;
+    updateLastEntry(entry);
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::activityData(CAfEntry *&dst, const CAfEntry &entry)
+{
+    if (lastMethodCalled == CAfStorageClient::SaveActivityMethod && CAfStorageClient::lastCallEntry) {
+        dst =CAfStorageClient::lastCallEntry;
+        CAfStorageClient::lastCallEntry =0;
+    }
+    lastMethodCalled = CAfStorageClient::ActivityDataMethod;
+    // @todo return something in dst
+    updateLastEntry(entry);
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::waitActivity()
+{
+    if(lastMethodCalled == CAfStorageClient::NoCall) {
+        lastMethodCalled = CAfStorageClient::WaitActivityMethod;
+        mObserver.waitActivityRequestCompleted(CAfStorageClient::expectedReturnCode, KNullDesC8);
+    }
+    
+    lastMethodCalled = CAfStorageClient::WaitActivityMethod;
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::launchActivity(const CAfEntry &entry)
+{
+    lastMethodCalled = CAfStorageClient::LaunchActivityMethod;
+    updateLastEntry(entry);
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::getThumbnail(const TDesC &imagePath, void *userData)
+{
+    lastMethodCalled = CAfStorageClient::GetThumbnailMethod;
+    delete lastCallThumbnailPath;
+    lastCallThumbnailPath = imagePath.Alloc();
+    lastCallUserData = userData;
+    CFbsBitmap *bitmap = new (ELeave)CFbsBitmap();
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError(bitmap->Create(TSize(128, 128), EColor4K));
+    mObserver.getThumbnailRequestCompleted(CAfStorageClient::expectedReturnCode, bitmap->Handle(), userData);
+    CleanupStack::PopAndDestroy(bitmap);
+    return CAfStorageClient::expectedReturnCode;
+}
+
+int CAfStorageClient::notifyDataChange()
+{
+    if(lastMethodCalled == CAfStorageClient::NoCall) {
+        lastMethodCalled = CAfStorageClient::NotifyDataChangeMethod;
+        mObserver.dataChangeNotificationCompleted(CAfStorageClient::expectedReturnCode);
+    }
+    lastMethodCalled = CAfStorageClient::NotifyDataChangeMethod;
+    return CAfStorageClient::expectedReturnCode;
+}
+
+// ---------------------------------------------------------------------------
+//  Invoking callbacks
+// ---------------------------------------------------------------------------
+// 
+void CAfStorageClient::invokeWaitActivityCallback(int result, const TDesC8 &data)
+{
+    mObserver.waitActivityRequestCompleted(result, data);
+}
+
+void CAfStorageClient::invokeGetThumbnailCallback(int result, int bitmapHandle, void *userData)
+{
+    mObserver.getThumbnailRequestCompleted(result, bitmapHandle, userData);
+}
+
+void CAfStorageClient::invokeDataChangeCallback(int result)
+{
+    mObserver.dataChangeNotificationCompleted(result);
+}
+
+// ---------------------------------------------------------------------------
+//  Helper methods
+// ---------------------------------------------------------------------------
+// 
+void CAfStorageClient::clearLastCallInfo()
+{
+    CAfStorageClient::constructorError = EFalse;
+    CAfStorageClient::expectedReturnCode = KErrNone;
+
+    delete CAfStorageClient::lastCallEntry;
+    CAfStorageClient::lastCallEntry = 0;
+    
+    CAfStorageClient::lastCallImageHandle = 0;
+    CAfStorageClient::lastCallThumbnailSize = TSize(0,0);
+    
+    delete CAfStorageClient::lastCallThumbnailPath;
+    CAfStorageClient::lastCallThumbnailPath = 0;
+    
+    CAfStorageClient::lastCallUserData = 0;
+    
+    lastMethodCalled = CAfStorageClient::NoCall;
+}
+
+void CAfStorageClient::updateLastEntry(const CAfEntry &entry)
+{
+    delete CAfStorageClient::lastCallEntry;
+    
+    CAfStorageClient::lastCallEntry = CAfEntry::NewL(
+        entry.Flags(),
+        entry.ApplicationId(),
+        entry.ActivityId(),
+        entry.CustomActivityName(),
+        entry.ImageSrc(),
+        entry.Data(CAfEntry::Private),
+        entry.Data(CAfEntry::Public),
+        entry.Timestamp()
+    );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/mocks/src/afstorageproxy.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,141 @@
+/*
+ * 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 "afstorageproxy.h"
+
+#include <QPixmap>
+
+bool AfStorageProxy::waitFailed = false;
+AfStorageProxy *AfStorageProxy::instance = 0;
+
+AfStorageProxy::AfStorageProxy(QObject *parent) :
+    QObject(parent)
+{
+    instance = this;
+}
+
+AfStorageProxy::~AfStorageProxy()
+{
+    instance = 0;
+}
+
+bool AfStorageProxy::saveActivity(int applicationId, const QString &activityId,
+    const QString &customActivityName, const QVariant &activityData, const QVariantHash &metadata,
+    const QPixmap &screenshot)
+{
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    mLastCallParams.insert("activityId", activityId);
+    mLastCallParams.insert("customActivityName", customActivityName);
+    mLastCallParams.insert("activityData", activityData);
+    mLastCallParams.insert("metadata", metadata);
+    mLastCallParams.insert("screenshot", QVariant::fromValue<QPixmap>(screenshot));
+    return true;
+}
+
+bool AfStorageProxy::removeActivity(int applicationId, const QString &activityId)
+{
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    mLastCallParams.insert("activityId", activityId);
+    return true;
+}
+
+bool AfStorageProxy::removeApplicationActivities(int applicationId)
+{
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    return true;
+}
+
+bool AfStorageProxy::activities(QList<QVariantHash> &list, int limit)
+{
+    Q_UNUSED(list);
+    mLastCallParams.clear();
+    mLastCallParams.insert("limit", limit);
+    return true;
+}
+
+bool AfStorageProxy::applicationActivities(QStringList &list, int applicationId)
+{
+    Q_UNUSED(list);
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    return true;
+}
+
+bool AfStorageProxy::activityData(QVariant &data, int applicationId, const QString &activityId)
+{
+    Q_UNUSED(data);
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    mLastCallParams.insert("activityId", activityId);
+    return true;
+}
+
+bool AfStorageProxy::activityMetaData(QVariantHash &metadata, int applicationId,
+    const QString &activityId)
+{
+    Q_UNUSED(metadata);
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    mLastCallParams.insert("activityId", activityId);
+    return true;
+}
+
+bool AfStorageProxy::waitActivity()
+{
+    if (waitFailed) {
+        waitFailed = false;
+        return false;
+    }
+    mLastCallParams.clear();
+    return true;
+}
+
+bool AfStorageProxy::launchActivity(int applicationId, const QString &activityUri)
+{
+    mLastCallParams.clear();
+    mLastCallParams.insert("applicationId", applicationId);
+    mLastCallParams.insert("activityUri", activityUri);
+    return true;
+}
+
+bool AfStorageProxy::getThumbnail(const QString &imagePath, void *userData)
+{
+    mLastCallParams.clear();
+    mLastCallParams.insert("imagePath", imagePath);
+    mLastCallParams.insert("userData", (uint) (userData));
+    emit
+    thumbnailRequested(QPixmap(), userData);
+    return true;
+}
+
+bool AfStorageProxy::notifyDataChange()
+{
+    mLastCallParams.clear();
+    return true;
+}
+
+// ---------------------------------------------------------------------------
+//  Mock implementation
+// ---------------------------------------------------------------------------
+//
+void AfStorageProxy::emitActivityRequested(const QString &activityId)
+{
+    emit activityRequested(activityId);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/mocks/src/applicationlauncher_p.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,59 @@
+/*
+* 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 "applicationlauncher_p.h"
+#include <QCoreApplication>
+
+ApplicationLauncherPrivate *ApplicationLauncherPrivate::instance = NULL;
+bool ApplicationLauncherPrivate::isRunningReturnValue = false;
+
+ApplicationLauncherPrivate::ApplicationLauncherPrivate()
+{
+    if (instance) {
+        delete instance;
+    }
+    instance = this;
+}
+
+ApplicationLauncherPrivate::~ApplicationLauncherPrivate()
+{
+    // create copy so we can check output even when original object is deleted
+    instance = new ApplicationLauncherPrivate(*this);
+}
+
+bool ApplicationLauncherPrivate::isRunning(int applicationId)
+{
+    QVariantHash call;
+    call.insert("applicationId", applicationId);
+    isRunningCalls.append(call);
+
+    return isRunningReturnValue;
+}
+
+void ApplicationLauncherPrivate::startApplication(int applicationId, const QUrl &uri)
+{
+    QVariantHash call;
+    call.insert("applicationId", applicationId);
+    call.insert("uri", uri);
+    startApplicationCalls.append(call);
+}
+
+void ApplicationLauncherPrivate::bringToForeground(int applicationId)
+{
+    QVariantHash call;
+    call.insert("applicationId", applicationId);
+    bringToForegroundCalls.append(call);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivation/inc/t_afactivation.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* 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 TESTAFACTIVATION_H
+#define TESTAFACTIVATION_H
+
+#include <QObject>
+#include <QSharedPointer>
+
+#include "afstorageproxy.h"
+class AfActivation;
+
+class TestAfActivation : public QObject
+{
+    Q_OBJECT
+
+public:
+    TestAfActivation();
+    
+private slots:
+    //QTest specific slots
+    void init();
+    void cleanup();
+
+    //test functions
+    void invokeActivationPublicInterface();
+    void invokeActivationPublicInterfaceCorrupt();
+    void testDefaultValuesAfterCreation();
+    void testSignalIsEmittedWhenActivityIsRequested();
+    void testValuesChangeWhenActivityIsRequested();
+    void testValuesChangeWhenActivityIsRequestedNoName();
+    void testChangingActivityInBackground();
+
+private:
+    AfStorageProxy* mServiceProvider;
+    AfActivation *mActivation;
+    QString mDefaultActivityName;
+};
+
+#endif // TESTAFACTIVATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivation/src/t_afactivation.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,141 @@
+/*
+ * 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 "t_afactivation.h"
+
+#include <QtTest/QtTest>
+
+#include "afactivation.h"
+#include "afactivation_p.h"
+#include "applicationlauncher_p.h"
+
+TestAfActivation::TestAfActivation()
+{
+    mDefaultActivityName = QString("appto://EBADC0DE?%1=TestActivity&TestParam=TestValue").arg(
+        Af::KActivityUriNameKey);
+    qRegisterMetaType<Af::ActivationReason> ("Af::ActivationReason");
+}
+
+void TestAfActivation::init()
+{
+    mActivation = new AfActivation();
+    mServiceProvider = AfStorageProxy::instance;
+}
+
+void TestAfActivation::cleanup()
+{
+    delete mActivation;
+    mActivation = NULL;
+}
+
+void TestAfActivation::invokeActivationPublicInterface()
+{
+    // AfActivation is only responsible of correct creation of AfActivationPrivate and
+    // forwarding requests. Since it's impossible to verify the effects of the member
+    // calls, just invoke the methods.
+    AfActivation activation;
+
+    activation.parameters();
+    activation.reason();
+    activation.name();
+}
+
+void TestAfActivation::invokeActivationPublicInterfaceCorrupt()
+{
+    bool errorReceived = false;
+    //af storage proxy is mocked so I can set static variable making it leave
+    AfStorageProxy::waitFailed = true;
+    try
+    {
+        AfActivation *activation = new AfActivation();
+    }
+    catch(...)
+    {
+        errorReceived = true;
+    }
+    QVERIFY(errorReceived);
+    }
+
+    void TestAfActivation::testDefaultValuesAfterCreation()
+    {
+        QCOMPARE(mActivation->parameters(), QVariantHash());
+        QCOMPARE(mActivation->reason(), Af::ActivationReasonNormal);
+        QCOMPARE(mActivation->name(), QString());
+    }
+
+    void TestAfActivation::testSignalIsEmittedWhenActivityIsRequested()
+    {
+        QSignalSpy activatedSpy(mActivation,
+            SIGNAL(activated(Af::ActivationReason,QString,QVariantHash)));
+        QVERIFY(activatedSpy.isValid());
+
+        mServiceProvider->emitActivityRequested(mDefaultActivityName);
+
+        QCOMPARE(activatedSpy.count(), 1);
+    }
+
+    void TestAfActivation::testValuesChangeWhenActivityIsRequested()
+    {
+        QSignalSpy activatedSpy(mActivation,
+            SIGNAL(activated(Af::ActivationReason,QString,QVariantHash)));
+        QVERIFY(activatedSpy.isValid());
+
+        mServiceProvider->emitActivityRequested(mDefaultActivityName);
+
+        QCOMPARE(activatedSpy.count(), 1);
+        QCOMPARE(mActivation->reason(), Af::ActivationReasonActivity);
+        QCOMPARE(mActivation->name(), QString("TestActivity"));
+        QVERIFY(mActivation->parameters().contains("TestParam"));
+        QCOMPARE(mActivation->parameters().value("TestParam").toString(), QString("TestValue"));
+    }
+
+    void TestAfActivation::testValuesChangeWhenActivityIsRequestedNoName()
+    {
+        QString activityname("appto://EBADC0DE?TestParam=TestValue");
+        QSignalSpy activatedSpy(mActivation,
+            SIGNAL(activated(Af::ActivationReason,QString,QVariantHash)));
+        QVERIFY(activatedSpy.isValid());
+
+        mServiceProvider->emitActivityRequested(activityname);
+        QCOMPARE(activatedSpy.count(), 1);
+
+        QCOMPARE(mActivation->reason(), Af::ActivationReasonActivity);
+        QCOMPARE(mActivation->name(), QString());
+        QVERIFY(mActivation->parameters().contains("TestParam"));
+        QCOMPARE(mActivation->parameters().value("TestParam").toString(), QString("TestValue"));
+    }
+
+    void TestAfActivation::testChangingActivityInBackground()
+    {
+        // bring to foreground is called by default
+        mServiceProvider->emitActivityRequested(mDefaultActivityName);
+
+        ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
+        QVERIFY(launcher);
+        QCOMPARE(launcher->bringToForegroundCalls.count(), 1);
+        launcher->bringToForegroundCalls.clear();
+
+        // bring to foreground is not called if background parameter is present
+        mServiceProvider->emitActivityRequested(
+            QString("appto://EBADC0DE?%1=TestActivity&%2=").arg(Af::KActivityUriNameKey).arg(
+                Af::KActivityUriBackgroundKey));
+
+        launcher = ApplicationLauncherPrivate::instance;
+        QVERIFY(launcher);
+        QCOMPARE(launcher->bringToForegroundCalls.count(), 0);
+    }
+
+    QTEST_MAIN(TestAfActivation)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivation/t_afactivation.pro	Wed Oct 06 16:00:22 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: 
+#
+
+INCLUDEPATH +=  ./inc \
+                ../mocks/inc
+                
+SOURCES +=  ./src/t_afactivation.cpp 
+HEADERS +=  ./inc/t_afactivation.h
+
+SOURCES +=  ../../../activityfw/activityserviceplugin/src/aflauncher.cpp \
+            ../../../activityfw/activityserviceplugin/src/afactivation.cpp \
+            ../../../activityfw/activityserviceplugin/src/afactivation_p.cpp \
+            ../../../activityfw/activityserviceplugin/src/afcommandlineparser.cpp \
+            ../mocks/src/applicationlauncher_p.cpp \
+            ../mocks/src/afstorageproxy.cpp \
+            
+HEADERS +=  ../../../activityfw/activityserviceplugin/inc/aflauncher.h \
+            ../../afactivities_global.h \
+            ../../afactivation.h \
+            ../../../activityfw/activityserviceplugin/inc/afactivation_p.h \
+            ../../../activityfw/activityserviceplugin/inc/afcommandlineparser.h \
+            ../mocks/inc/applicationlauncher_p.h \
+            ../mocks/inc/afstorageproxy.h \
+
+include(../tsrc_common.pri)
+
+symbian:!coverage:CONFIG += symbian_test
+
+
+symbian:MMP_RULES += SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/inc/t_afactivitylauncher.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* 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 T_AFACTIVITYLAUNCHER_H
+#define T_AFACTIVITYLAUNCHER_H
+
+#include <QObject>
+
+#include <apgcli.h>
+#include <w32std.h>
+
+class CAfActivityLauncher;
+
+class TestAfActivityLauncher : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void initTestCase();
+    void cleanupTestCase();
+    
+    void init();
+    void cleanup();
+
+    void testScheme();
+    void testUidParsing();
+    void testRunningCase();
+    void testStartupCase();
+    
+    void callUnusedCallbacks();
+
+private:
+    CAfActivityLauncher *mLauncher;
+    
+    RApaLsSession mApaLsSession;
+    RWsSession mWsSession;
+};
+
+#endif // T_AFACTIVITYLAUNCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/inc/afapplicationlauncher.h	Wed Oct 06 16:00:22 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 AFAPPLICATIONLAUNCHER_H
+#define AFAPPLICATIONLAUNCHER_H
+
+#include <e32base.h>
+
+class RApaLsSession;
+class RWsSession;
+
+class TAfApplicationLauncher
+{
+
+public:
+    TAfApplicationLauncher(RApaLsSession &apaLsSession, RWsSession &wsSession);
+
+public:
+    TBool isRunning(TUid applicationId);
+    void startApplicationL(TUid applicationId, const TDesC &uri);
+
+public:
+    static TBool expectedIsRunningResult;
+    
+    static TInt lastStartAppId;
+    static HBufC *lastStartUri;
+    
+};
+
+#endif // AFAPPLICATIONLAUNCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/inc/afstorageclient.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* 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 AFSTORAGECLIENT_H
+#define AFSTORAGECLIENT_H
+
+#include "afasyncrequestobserver.h"
+
+class CAfEntry;
+
+class CAfStorageClient : public CBase
+{
+public:
+    static CAfStorageClient *NewL(MAfAsyncRequestObserver &observer);
+    static CAfStorageClient *NewLC(MAfAsyncRequestObserver &observer);
+    virtual ~CAfStorageClient();
+
+private:
+    CAfStorageClient();
+    
+public:    
+    int launchActivity(const CAfEntry &entry);
+    
+public:
+    static TInt lastLaunchAppId;
+    static HBufC *lastLaunchUri;
+    
+};
+
+#endif //AFSTORAGECLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/src/afapplicationlauncher.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* 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 "afapplicationlauncher.h"
+
+TBool TAfApplicationLauncher::expectedIsRunningResult = EFalse;
+TInt TAfApplicationLauncher::lastStartAppId = 0;
+HBufC* TAfApplicationLauncher::lastStartUri = 0;
+
+// -----------------------------------------------------------------------------
+//  Public part of Construction, destructor
+// -----------------------------------------------------------------------------
+//
+TAfApplicationLauncher::TAfApplicationLauncher(RApaLsSession &/*apaLsSession*/, RWsSession &/*wsSession*/)
+{
+}
+
+// -----------------------------------------------------------------------------
+//  
+// -----------------------------------------------------------------------------
+//
+TBool TAfApplicationLauncher::isRunning(TUid /*applicationId*/)
+{    
+    return expectedIsRunningResult;
+}
+
+void TAfApplicationLauncher::startApplicationL(TUid applicationId, const TDesC &uri)
+{
+    lastStartAppId = applicationId.iUid;
+    lastStartUri = uri.Alloc();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/mocks/src/afstorageclient.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* 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 "afstorageclient.h"
+
+#include <afentry.h>
+
+TInt CAfStorageClient::lastLaunchAppId = 0;
+HBufC* CAfStorageClient::lastLaunchUri = 0;
+
+CAfStorageClient *CAfStorageClient::NewL(MAfAsyncRequestObserver &observer)
+{
+    CAfStorageClient *self = CAfStorageClient::NewLC(observer);
+    CleanupStack::Pop(self);
+    return self;
+}
+
+CAfStorageClient *CAfStorageClient::NewLC(MAfAsyncRequestObserver &/*observer*/)
+{
+    CAfStorageClient *self = new (ELeave) CAfStorageClient();
+    CleanupStack::PushL(self);
+    return self;
+}
+
+CAfStorageClient::~CAfStorageClient()
+{
+    delete lastLaunchUri;
+    lastLaunchUri = 0;
+}
+
+CAfStorageClient::CAfStorageClient()
+{
+}
+
+int CAfStorageClient::launchActivity(const CAfEntry &entry)
+{
+    lastLaunchAppId = entry.ApplicationId();
+    lastLaunchUri = entry.ActivityId().Alloc();
+    
+    return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/src/t_afactivitylauncher.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,114 @@
+/*
+* 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 "t_afactivitylauncher.h"
+
+#include <QtTest/QtTest>
+#include "afapplicationlauncher.h"
+#include <afstorageclient.h>
+#include "afactivitylauncher.h"
+#include "afactivitylauncher_p.h"
+
+
+void TestAfActivityLauncher::initTestCase()
+{
+    QCOMPARE(mApaLsSession.Connect(), KErrNone);
+    QCOMPARE(mWsSession.Connect(), KErrNone);
+}
+
+void TestAfActivityLauncher::cleanupTestCase()
+{
+    mApaLsSession.Close();
+    mWsSession.Close();
+}
+
+void TestAfActivityLauncher::init()
+{    
+    QT_TRAP_THROWING(mLauncher = CAfActivityLauncher::NewL(mApaLsSession, mWsSession));
+}
+
+void TestAfActivityLauncher::cleanup()
+{
+    delete TAfApplicationLauncher::lastStartUri;
+    TAfApplicationLauncher::lastStartUri = 0;
+    TAfApplicationLauncher::lastStartAppId = 0;
+    
+    delete CAfStorageClient::lastLaunchUri;
+    CAfStorageClient::lastLaunchUri = 0;
+    CAfStorageClient::lastLaunchAppId = 0;
+
+    delete mLauncher;
+    mLauncher = 0;
+}
+
+void TestAfActivityLauncher::testScheme()
+{
+    TAfApplicationLauncher::expectedIsRunningResult = ETrue;
+
+    TInt error;
+    TRAP(error, mLauncher->launchActivityL(_L("appto://DEADBEEF")));
+    QCOMPARE(error, KErrNone);
+    
+    TRAP(error, mLauncher->launchActivityL(_L("bzzzt://DEADBEEF")));
+    QCOMPARE(error, KErrArgument);
+}
+
+void TestAfActivityLauncher::testUidParsing()
+{
+    TAfApplicationLauncher::expectedIsRunningResult = ETrue;
+
+    TInt error;
+    TRAP(error, mLauncher->launchActivityL(_L("appto://DEADBEEF")));
+    QCOMPARE(error, KErrNone);
+    
+    TRAP(error, mLauncher->launchActivityL(_L("appto://INVALID")));
+    QCOMPARE(error, KErrGeneral);
+}
+
+void TestAfActivityLauncher::testRunningCase()
+{
+    TAfApplicationLauncher::expectedIsRunningResult = ETrue;
+
+    _LIT(KActivityUri, "appto://DEADBEEF");
+    TRAPD(error, mLauncher->launchActivityL(KActivityUri));
+    QCOMPARE(error, KErrNone);
+    
+    QCOMPARE(CAfStorageClient::lastLaunchAppId, TInt(0xDEADBEEF));
+    QVERIFY(CAfStorageClient::lastLaunchUri->Compare(KActivityUri()) == 0);
+}
+
+void TestAfActivityLauncher::testStartupCase()
+{
+    TAfApplicationLauncher::expectedIsRunningResult = EFalse;
+
+    _LIT(KActivityUri, "appto://DEADBEEF");
+    TRAPD(error, mLauncher->launchActivityL(KActivityUri));
+    QCOMPARE(error, KErrNone);
+    
+    QCOMPARE(TAfApplicationLauncher::lastStartAppId, TInt(0xDEADBEEF));
+    QVERIFY(TAfApplicationLauncher::lastStartUri->Compare(KActivityUri()) == 0);
+}
+
+void TestAfActivityLauncher::callUnusedCallbacks()
+{
+    CAfActivityLauncherPrivate* imp = CAfActivityLauncherPrivate::NewL(mApaLsSession, mWsSession);
+    imp->waitActivityRequestCompleted(0, KNullDesC8());
+    imp->getThumbnailRequestCompleted(0, 0, 0);
+    imp->dataChangeNotificationCompleted(0);
+    delete imp;
+}
+
+QTEST_MAIN(TestAfActivityLauncher)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitylauncher/t_afactivitylauncher.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,46 @@
+#
+# 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: 
+#
+
+CONFIG += qtestlib console
+
+INCLUDEPATH +=  ./inc \
+                mocks/inc/ \
+                ../../../../activityfw/afactivitylauncher/inc/ \
+                ../../../../activityfw/inc/ \
+                ../../../../activityfw/storage/common/inc/ \
+                ../../../../activityfw/storage/client/inc/
+
+HEADERS +=  ./inc/t_afactivitylauncher.h \
+            ../../../../activityfw/storage/common/inc/afentry.h
+
+SOURCES +=  mocks/src/afapplicationlauncher.cpp \
+            ./src/t_afactivitylauncher.cpp \
+            ../../../../activityfw/afactivitylauncher/src/afactivitylauncher.cpp \
+            ../../../../activityfw/afactivitylauncher/src/afactivitylauncher_p.cpp \
+            mocks/src/afstorageclient.cpp \
+            ../../../../activityfw/storage/common/src/afentry.cpp
+            
+            
+
+LIBS += -linetprotutil \
+        -lestor \
+        -lapgrfx \
+        -lws32 \
+
+symbian:!coverage: CONFIG += symbian_test
+
+
+symbian:MMP_RULES += SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitystorage/inc/t_afactivitystorage.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* 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 TESTAFACTIVITYSTORAGE_H
+#define TESTAFACTIVITYSTORAGE_H
+
+#include <QObject>
+#include <QSharedPointer>
+#include "afstorageproxy.h"
+#include "afactivitystorage.h"
+
+class TestAfActivityStorage : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void init();
+    void cleanup();
+
+    void testSaveActivity();
+    void testRemoveActivity();
+    void testAllActivities();
+    void testActivityData();
+    void testActivityMetaData();
+    void testActivityMetaDataPublicClient();
+    
+private:
+    QSharedPointer<AfStorageProxy> mServiceProvider;
+    AfActivityStoragePrivate *mStorage;
+
+};
+
+#endif // TESTAFACTIVITYSTORAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitystorage/src/t_afactivitystorage.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,106 @@
+/*
+* 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 "t_afactivitystorage.h"
+
+#include <QtTest/QtTest>
+
+#include "afactivitystorage_p.h"
+
+const char DefaultActivityName [] = "DefaultTestActivityName";
+const char DefaultActivityPrivate [] = "DefaultTestActivityPrivateData";
+const char DefaultActivityPublic [] = "DefaultTestActivityPublicData";
+const char DefaultActivityPublicKey [] = "FakeData";
+
+void TestAfActivityStorage::init()
+{
+    mServiceProvider = QSharedPointer<AfStorageProxy>(new AfStorageProxy());
+    mStorage = new AfActivityStoragePrivate(mServiceProvider);
+}
+
+void TestAfActivityStorage::cleanup()
+{
+    delete mStorage;
+    mStorage = NULL;
+}
+
+void TestAfActivityStorage::testSaveActivity()
+{
+    const int applicationId(RProcess().SecureId().iId);
+    QString activityId(DefaultActivityName);
+    QVariant privateData(DefaultActivityPrivate);
+    QVariantHash publicData;
+    publicData.insert(DefaultActivityPublicKey, QVariant(DefaultActivityPublic));
+
+    mStorage->saveActivity(activityId, privateData, publicData);
+    
+    QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt());
+    QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString());
+    QVERIFY(privateData == mServiceProvider->mLastCallParams.value("activityData"));
+    QVERIFY(publicData.count() <= mServiceProvider->mLastCallParams.value("metadata").toHash().count());
+}
+
+void TestAfActivityStorage::testRemoveActivity()
+{
+    const int applicationId(RProcess().SecureId().iId);
+    QString activityId(DefaultActivityName);
+    
+    mStorage->removeActivity(activityId);
+    
+    QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt());
+    QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString());
+}
+
+void TestAfActivityStorage::testAllActivities()
+{
+    const int applicationId(RProcess().SecureId().iId);
+    
+    mStorage->allActivities();
+    
+    QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt());
+}
+
+void TestAfActivityStorage::testActivityData()
+{
+    const int applicationId(RProcess().SecureId().iId);
+    QString activityId(DefaultActivityName);
+    
+    mStorage->activityData(activityId);
+    
+    QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt());
+    QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString());
+}
+
+void TestAfActivityStorage::testActivityMetaData()
+{
+    const int applicationId(RProcess().SecureId().iId);
+    QString activityId(DefaultActivityName);
+    
+    mStorage->activityMetaData(activityId);
+    
+    QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt());
+    QVERIFY(activityId == mServiceProvider->mLastCallParams.value("activityId").toString());
+}
+
+//to ensure coverage for AfActivityStorage public implementation
+void TestAfActivityStorage::testActivityMetaDataPublicClient()
+{
+	AfActivityStorage *storage = new AfActivityStorage();
+	storage->activityMetaData("testId");
+	delete storage;
+}
+
+QTEST_MAIN(TestAfActivityStorage)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/t_afactivitystorage/t_afactivitystorage.pro	Wed Oct 06 16:00:22 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: 
+#
+
+INCLUDEPATH +=  ./inc \
+                ../mocks/inc
+
+SOURCES +=  ./src/t_afactivitystorage.cpp
+HEADERS +=  ./inc/t_afactivitystorage.h
+
+SOURCES +=  ../../../activityfw/activityserviceplugin/src/afactivitystorage.cpp \
+            ../../../activityfw/activityserviceplugin/src/afactivitystorage_p.cpp \
+            ../mocks/src/afstorageproxy.cpp \
+            
+HEADERS +=  ../../afactivities_global.h \
+            ../../afactivitystorage.h \
+            ../../../activityfw/activityserviceplugin/inc/afactivitystorage_p.h \
+            ../mocks/inc/afstorageproxy.h \
+
+include(../tsrc_common.pri)
+
+symbian:!coverage: CONFIG += symbian_test
+
+
+symbian:MMP_RULES += SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/tsrc.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,23 @@
+#
+# 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 = t_afactivation \
+          t_afactivitystorage \
+          t_afactivitylauncher \
+
+CONFIG  += ordered
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/activity_framework_api/tsrc/tsrc_common.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,24 @@
+#
+# 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(../../../activityfw/activityserviceplugin/activityserviceplugin.pri)
+
+CONFIG += qtestlib console
+
+INCLUDEPATH *= $$PWD/../inc
+DEPENDPATH *= $$PWD/../inc
+
+DEFINES += AFACTIVITIES_TEST
--- a/homescreensrv_plat/contentstorage_api/caclient_global.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies 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 CACLIENT_GLOBAL_H
-#define CACLIENT_GLOBAL_H
-
-
-#ifdef CACLIENT_LIB
-#define CACLIENT_EXPORT Q_DECL_EXPORT
-#else
-#ifdef CACLIENT_TEST
-#define CACLIENT_EXPORT
-#else
-#define CACLIENT_EXPORT Q_DECL_IMPORT
-#endif
-#endif
-
-#ifndef CONTENTARSENAL_UNITTEST
-#define CA_CLIENT_TEST_CLASS(aClassName)
-#else
-#define CA_CLIENT_TEST_CLASS(aClassName) class aClassName;
-#endif
-
-#ifndef CONTENTARSENAL_UNITTEST
-#define CA_CLIENT_TEST_FRIEND_CLASS(aClassName)
-#else
-#define CA_CLIENT_TEST_FRIEND_CLASS(aClassName) friend class aClassName;
-#endif
-
-#endif // CACLIENT_GLOBAL_H
--- a/homescreensrv_plat/contentstorage_api/cadefs.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +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: cadefs.h
- *
- */
-
-#ifndef CADEFS_H
-#define CADEFS_H
-
-#include <QFlags>
-#include <QMetaType>
-
-enum ChangeType
-{
-    AddChangeType,
-    RemoveChangeType,
-    UpdateChangeType
-};
-
-enum EntryRole
-{
-    ItemEntryRole = 1,
-    GroupEntryRole = 2
-};
-Q_DECLARE_FLAGS(EntryRoles, EntryRole)
-Q_DECLARE_OPERATORS_FOR_FLAGS(EntryRoles)
-
-enum SortAttribute
-{
-    NameSortAttribute,
-    CreatedTimestampSortAttribute,
-    MostUsedSortAttribute,
-    LastUsedSortAttribute,
-    DefaultSortAttribute
-// default - return items in custom order
-};
-
-enum EntryFlag
-{
-    UsedEntryFlag = 1,
-    UninstallEntryFlag = 2,
-    RemovableEntryFlag = 4,
-    VisibleEntryFlag = 8,
-    ReservedEntryFlag = 16, //flag is unused, stays for compatibility
-    NativeEntryFlag = 32,
-    MissingEntryFlag = 64
-};
-
-enum LocalizationType
-{
-    NameLocalized,
-    DescriptionLocalized
-};
-
-Q_DECLARE_FLAGS(EntryFlags, EntryFlag)
-Q_DECLARE_OPERATORS_FOR_FLAGS(EntryFlags)
-Q_DECLARE_METATYPE(EntryFlags)
-
-enum ErrorCode
-{
-    NoErrorCode = 0,
-    NotFoundErrorCode,
-    OutOfMemoryErrorCode,
-    BadArgumentErrorCode,
-    ServerTerminated,
-    UnknownErrorCode
-};
-
-const char caCmdOpen[] = "open";
-const char caCmdRemove[] = "remove";
-
-#ifndef QT_NO_DEBUG_OUTPUT
-#   define USE_QDEBUG_IF(predicate) if (!predicate) {} else qDebug()
-#else
-#   define USE_QDEBUG_IF(predicate) if (1) {} else qDebug()
-#endif
-
-#ifndef QT_NO_WARNING_OUTPUT
-#   define USE_QWARNING_IF(predicate) if (!predicate) {} else qWarning()
-#else
-#   define USE_QWARNING_IF(predicate) if (1) {} else qWarning()
-#endif
-
-#endif // CADEFS_H
--- a/homescreensrv_plat/contentstorage_api/caentry.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +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: caentry.h
- *
- */
-
-#ifndef CAENTRY_H
-#define CAENTRY_H
-
-#include <QMap>
-#include <QSharedDataPointer>
-#include <QSize>
-
-#include "caclient_global.h"
-#include "cadefs.h"
-#include "caicondescription.h"
-
-CA_CLIENT_TEST_CLASS( TestCaClient )
-
-class CaObjectAdapter;
-class CaEntryPrivate;
-class HbIcon;
-
-class CACLIENT_EXPORT CaEntry
-{
-    /*!
-     * This class is not intended to be derived.
-     */
-
-public:
-
-    explicit CaEntry(EntryRole entryRole = ItemEntryRole);
-
-    virtual ~CaEntry();
-
-    int id() const;
-
-    QString text() const;
-    void setText(const QString &text, bool localized = false);
-
-    QString description() const;
-    void setDescription(const QString &text, bool localized = false);
-    
-    CaIconDescription iconDescription() const;
-    void setIconDescription(const CaIconDescription &iconDescription);
-
-    EntryFlags flags() const;
-    void setFlags(EntryFlags flags);
-
-    QString entryTypeName() const;
-    void setEntryTypeName(const QString &entryTypeName);
-
-    QMap<QString, QString> attributes() const;
-
-    QString attribute(const QString &name) const;
-    void setAttribute(const QString &name, const QString &value);
-
-    HbIcon makeIcon(const QSizeF &size = QSizeF(70.0, 70.0)) const;
-
-    EntryRole role() const;
-
-    CaEntry(const CaEntry &entry);
-    CaEntry &operator=(const CaEntry &entry);
-
-private:
-
-    void setId(int id);
-    bool isLocalized(LocalizationType localized) const; 
-
-private:
-    /*!
-     * A special kind of pointer, supporting sharing data, to a private
-     * implementation.
-     */
-    QSharedDataPointer<CaEntryPrivate> m_d;
-
-    friend class CaEntryPrivate;
-    friend class ::CaObjectAdapter;
-
-    CA_CLIENT_TEST_FRIEND_CLASS( TestCaClient )
-
-};
-
-
-#endif // CAENTRY_H
--- a/homescreensrv_plat/contentstorage_api/caicondescription.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +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: caicondescription.h
- *
- */
-
-#ifndef CAICONDESCRIPTION_H
-#define CAICONDESCRIPTION_H
-
-#include <QSharedDataPointer>
-
-#include "caclient_global.h"
-
-class CaObjectAdapter;
-
-class CaIconDescriptionPrivate;
-
-class CACLIENT_EXPORT CaIconDescription
-{
-
-public:
-
-    CaIconDescription();
-    CaIconDescription(const CaIconDescription &iconDescription);
-    ~CaIconDescription();
-
-    CaIconDescription &operator=(const CaIconDescription &iconDescription);
-
-    int id() const;
-
-    QString filename() const;
-    void setFilename(const QString &filename);
-
-    QString skinId() const;
-    void setSkinId(const QString &skinId);
-
-    QString applicationId() const;
-    void setApplicationId(const QString &applicationId);
-
-private:
-
-    void setId(int id);
-
-private:
-    /**
-     * Pointer to a private implementation.
-     */
-    QSharedDataPointer<CaIconDescriptionPrivate> m_d;
-
-    friend class CaIconDescriptionPrivate;
-    friend class ::CaObjectAdapter;
-};
-
-#endif // CAICONDESCRIPTION_H
--- a/homescreensrv_plat/contentstorage_api/caitemmodel.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +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: caitemmodel.h
- *
- */
-
-#ifndef CASTANDARDITEMMODEL_H
-#define CASTANDARDITEMMODEL_H
-
-// System includes
-#include <QAbstractItemModel>
-#include <QAbstractItemView>
-
-// User includes
-#include "caclient_global.h"
-#include "caquery.h"
-
-// Forward declarations
-class CaEntry;
-class CaItemModelPrivate;
-CA_CLIENT_TEST_CLASS(TestCaClient)
-
-// Class declaration
-class CACLIENT_EXPORT CaItemModel: public QAbstractItemModel
-{
-
-Q_OBJECT
-    CA_CLIENT_TEST_FRIEND_CLASS(TestCaClient)
-
-public:
-
-    // Data types
-    enum CaItemRole
-    {
-        IdRole = Qt::UserRole + 1,
-        ParentIdRole,
-        TypeRole,
-        FlagsRole,
-        TextRole,//contains title represented as QString,
-        DescriptionRole, // contains item description
-        FullTextRole, //'title description' convinient for operations such as search
-        UninstalRole,  //contains progress status as decimal number in QString
-        CollectionTitleRole //contains title represented as QString,
-
-    };
-
-    // Function declarations
-    CaItemModel(const CaQuery &query, QObject *parent = 0);
-    ~CaItemModel();
-
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    virtual QModelIndex index(int row, int column = 0,
-        const QModelIndex &parent = QModelIndex()) const;
-    virtual QModelIndex parent(const QModelIndex &index) const;
-    QModelIndex root() const;
-    virtual QVariant data(const QModelIndex &index, int role =
-        Qt::DisplayRole) const;
-    void setAutoUpdate(bool autoUpdate);
-    void setSecondLineVisibility(bool secondLineVisible);
-    bool secondLineVisibility() const;
-    bool isAutoUpdate() const;
-    void setSort(SortAttribute sortAttribute, Qt::SortOrder sortOrder =
-        Qt::AscendingOrder);
-    void setIconSize(const QSizeF &size);
-    QSizeF getIconSize() const;
-    void updateModel();
-    void setParentId(int parentId);
-    void setFlagsOn(const EntryFlags &onFlags);
-    void setFlagsOff(const EntryFlags &offFlags);
-    QSharedPointer<CaEntry> entry(const QModelIndex &index) const;
-
-    QList<int> getUninstallingEntriesIds(int componentId);
-    void updateProgress(int id, int valueOfProgress);
-
-    
-signals:
-
-    void scrollTo(int row, QAbstractItemView::ScrollHint hint =
-        QAbstractItemView::EnsureVisible);
-    void empty(bool value);
-    void countChange();
-    
-protected:
-    // data
-
-    CaItemModelPrivate * const m_d;
-    friend class CaItemModelPrivate;
-
-};
-
-#endif // CASTANDARDITEMMODEL_H
--- a/homescreensrv_plat/contentstorage_api/camenuiconutility.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +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 API supports requesting raw bitmaps
- *
-*/
-
-
-#ifndef __CAMENUICONUTILITY_H__
-#define __CAMENUICONUTILITY_H__
-
-#include "caclient_global.h"
-
-class CaEntry;
-class HbIcon;
-
-class CACLIENT_EXPORT CaMenuIconUtility 
-{
-public:
-    static HbIcon getApplicationIcon(int uid,
-            const QSizeF &size = QSizeF(50,80));
-    
-    static HbIcon getEntryIcon(const CaEntry& entry,
-            const QSizeF &size = QSizeF(50,80));
-    
-
-    
-    
-    
-};
-
-#endif // __CAMENUICONUTILITY_H__
--- a/homescreensrv_plat/contentstorage_api/canotifier.h	Mon Sep 27 11:31:59 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: canotifier.h
- *
- */
-
-#ifndef CANOTIFIER_H
-#define CANOTIFIER_H
-
-#include <QObject>
-#include "cadefs.h"
-#include "caclient_global.h"
-#include "caentry.h"
-
-CA_CLIENT_TEST_CLASS( TestCaClient )
-
-
-class CaNotifierPrivate;
-class CaNotifierFilter;
-
-class CACLIENT_EXPORT CaNotifier: public QObject
-{
-Q_OBJECT
-
-public:
-
-    explicit CaNotifier(CaNotifierPrivate *const notifierPrivate);
-
-    virtual ~CaNotifier();
-
-signals:
-
-    /*!
-        A signal emited when the entry is changed.
-        \param entryId entry id.
-        \param changeType the type of the change.
-    */
-    void entryChanged(int entryId, ChangeType changeType);
-
-    /*!
-        A signal emited when the entry is changed.
-        \param entry changed entry.
-        \param changeType the type of the change.
-    */
-    void entryChanged(const CaEntry &entry, ChangeType changeType);
-
-    /*!
-        A signal emited when the entry is touched.
-        \param id entry id.
-    */
-    void entryTouched(int id);
-
-    /*!
-        A signal emited when group content is changed.
-        \param groupId group id.
-    */
-    void groupContentChanged(int groupId);
-
-protected:
-
-    virtual void connectNotify(const char * signal);
-
-    virtual void disconnectNotify(const char * signal);
-
-private:
-
-    CaNotifierPrivate * const m_d;
-
-    Q_DISABLE_COPY(CaNotifier)
-
-    friend class CaNotifierPrivate;
-
-    CA_CLIENT_TEST_FRIEND_CLASS( TestCaClient )
-
-};
-
-
-#endif // CANOTIFIER_H
--- a/homescreensrv_plat/contentstorage_api/canotifierfilter.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +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: canotifierfilter.h
- *
- */
-
-#ifndef CANOTIFIERFILTER_H
-#define CANOTIFIERFILTER_H
-
-#include <QList>
-
-#include "cadefs.h"
-#include "caclient_global.h"
-#include "caentry.h"
-
-class CaNotifierFilterPrivate;
-class CaQuery;
-
-class CACLIENT_EXPORT CaNotifierFilter
-{
-    friend class CaNotifierFilterPrivate;
-
-public:
-
-    CaNotifierFilter();
-    CaNotifierFilter(const CaNotifierFilter &notifierFilter);
-    explicit CaNotifierFilter(const CaQuery &query);
-    CaNotifierFilter &operator=(const CaNotifierFilter &notifierFilter);
-    virtual ~CaNotifierFilter();
-
-    int getParentId() const;
-    void setParentId(int parentId);
-
-    QList<int> getIds() const;
-    void setIds(const QList<int> &ids);
-
-    EntryRoles getEntryRole() const;
-    void setEntryRole(EntryRoles entryRole);
-
-    QStringList getTypeNames() const;
-    void setTypeNames(const QStringList &typeNames);
-
-private:
-
-    CaNotifierFilterPrivate * const m_d;
-
-};
-
-#endif // CANOTIFIERFILTER_H
--- a/homescreensrv_plat/contentstorage_api/caquery.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +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: caquery.h
- *
- */
-
-#ifndef CAQUERY_H
-#define CAQUERY_H
-
-#include <QStringList>
-#include "caclient_global.h"
-#include "cadefs.h"
-
-class CaQueryPrivate;
-
-class CACLIENT_EXPORT CaQuery
-{
-
-public:
-
-    CaQuery();
-    CaQuery(const CaQuery &query);
-    CaQuery &operator=(const CaQuery &query);
-    ~CaQuery();
-
-    void setEntryRoles(EntryRoles entryRoles);
-    EntryRoles entryRoles() const;
-
-    void setParentId(int id);
-    int parentId() const;
-
-    void setChildId(int id);
-    int childId() const;
-
-    void setEntryTypeNames(const QStringList &entryTypeNames);
-    QStringList entryTypeNames() const;
-
-    void addEntryTypeName(const QString &entryTypeName);
-
-    void setFlagsOn(const EntryFlags &onFlags);
-    EntryFlags flagsOn() const;
-    void setFlagsOff(const EntryFlags &offFlags);
-    EntryFlags flagsOff() const;
-
-    void setSort(SortAttribute sortAttribute, 
-        Qt::SortOrder sortOrder = Qt::AscendingOrder);
-    void getSort(SortAttribute& sortAttribute, 
-        Qt::SortOrder& sortOrder) const;
-
-    unsigned int count() const;
-    void setCount(unsigned int count);
-
-    QMap<QString, QString> attributes() const;
-    QString attribute(const QString &name) const;
-    void setAttribute(const QString &name, const QString &value);
-    void removeAttribute(const QString &name);
-    
-    void clear();
-
-private:
-
-    /**
-     * Pointer to a private implementation.
-     */
-    CaQueryPrivate * const m_d;
-    friend class CaQueryPrivate;
-
-};
-
-#endif // CAQUERY_H
--- a/homescreensrv_plat/contentstorage_api/caservice.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +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: caservice.h
- *
- */
-
-#ifndef CASERVICE_H
-#define CASERVICE_H
-
-#include <QObject>
-#include <QSharedPointer>
-
-#include <cadefs.h>
-
-#include "caclient_global.h"
-#include "canotifierfilter.h"
-
-class CaQuery;
-class CaEntry;
-class CaServicePrivate;
-class CaNotifier;
-
-class CACLIENT_EXPORT CaService: public QObject
-{
-
-Q_OBJECT
-
-    explicit CaService(QObject *parent = 0);
-
-    ~CaService();
-
-public:
-
-    static QSharedPointer<CaService> instance();
-
-    QSharedPointer<CaEntry> getEntry(int entryId) const;
-    QList< QSharedPointer<CaEntry> > getEntries(const QList<int> &entryIdList) const;
-    QList< QSharedPointer<CaEntry> > getEntries(const CaQuery &query) const;
-    QList<int> getEntryIds(const CaQuery &query) const;
-
-    QSharedPointer<CaEntry> createEntry(const CaEntry &entry) const;
-
-    bool removeEntry(int entryId) const;
-    bool removeEntry(const CaEntry &entry) const;
-    bool removeEntries(const QList<int> &entryIdList) const;
-    bool removeEntries(const QList< QSharedPointer<CaEntry> > &entryList) const;
-
-    bool updateEntry(const CaEntry &entry) const;
-    bool touch(const CaEntry &entry) const;
-
-    bool insertEntryIntoGroup(int groupId, int entryId,
-        int beforeEntryId) const;
-    bool insertEntryIntoGroup(const CaEntry &group, const CaEntry &entry,
-        int beforeEntryId) const;
-    bool insertEntriesIntoGroup(int groupId, const QList<int> &entryIdList,
-        int beforeEntryId) const;
-    bool insertEntriesIntoGroup(const CaEntry &group,
-        const QList< QSharedPointer<CaEntry> > &entryList, int beforeEntryId) const;
-
-    bool removeEntryFromGroup(int groupId, int entryId) const;
-    bool removeEntryFromGroup(const CaEntry &group,
-        const CaEntry &entry) const;
-    bool removeEntriesFromGroup(int groupId,
-        const QList<int> &entryIdList) const;
-    bool removeEntriesFromGroup(const CaEntry &group,
-        const QList< QSharedPointer<CaEntry> > &entryList) const;
-
-    bool appendEntryToGroup(int groupId, int entryId) const;
-    bool appendEntryToGroup(const CaEntry &group,
-        const CaEntry &entry) const;
-    bool appendEntriesToGroup(int groupId,
-        const QList<int> &entryIdList) const;
-    bool appendEntriesToGroup(const CaEntry &group,
-        const QList< QSharedPointer<CaEntry> > &entryList) const;
-
-    bool prependEntryToGroup(int groupId, int entryId) const;
-    bool prependEntryToGroup(const CaEntry &group,
-        const CaEntry &entry) const;
-    bool prependEntriesToGroup(int groupId,
-        const QList<int> &entryIdList) const;
-    bool prependEntriesToGroup(const CaEntry &group,
-        const QList< QSharedPointer<CaEntry> > &entryList) const;
-
-    int executeCommand(int entryId, const QString &command = 
-        caCmdOpen, QObject* receiver = NULL, const char* member = NULL) const;
-    int executeCommand(const CaEntry &entry, const QString &command =
-        caCmdOpen, QObject* receiver = NULL, const char* member = NULL) const;
-
-    CaNotifier * createNotifier(const CaNotifierFilter &filter) const;
-
-    bool customSort(int groupId, QList<int> &entryIdList) const;
-
-    ErrorCode lastError() const;
-
-    signals:
-
-    void entryChanged(int entryId, ChangeType changeType);
-    void entryChanged(const CaEntry &entry, ChangeType changeType);
-    void entryTouched(int id);
-    void groupContentChanged(int groupId);
-
-private:
-
-    /**
-     * Pointer to a private implementation.
-     */
-    CaServicePrivate * const m_d;
-
-    /**
-     * The static pointer to the instance of CaService.
-     */
-    static QWeakPointer<CaService> m_instance;
-
-    friend class CaServicePrivate;
-    friend class QtSharedPointer::ExternalRefCount<CaService>;
-
-    Q_DISABLE_COPY(CaService)
-
-};
-
-
-#endif // CASERVICE_H
--- a/homescreensrv_plat/contentstorage_api/casoftwareregistry.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description:  ?Description
- *
- */
-
-#ifndef CA_SOFTWARE_REGISTRY_H
-#define CA_SOFTWARE_REGISTRY_H
-
-#include <QHash>
-#include <QObject>
-#include <QSharedPointer>
-#include <QString>
-
-#include "caclient_global.h"
-
-//FORWARD DECLARATIONS
-class QStringList;
-class CaSoftwareRegistryPrivate;
-class CaUninstallNotifier;
-
-/**
- * Class provides Usif specific services
- */
-class CACLIENT_EXPORT CaSoftwareRegistry: public QObject
-{
-
-Q_OBJECT
-
-    explicit CaSoftwareRegistry(QObject *parent = 0);
-
-    ~CaSoftwareRegistry();
-
-public:
-
-    static QSharedPointer<CaSoftwareRegistry> create();
-
-    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;
-
-    QList<DetailMap> retrieveLogEntries() const;
-    
-    CaUninstallNotifier *createUninstallNotifier() const;
-
-    static QString componentNameKey();
-    static QString componentVersionKey();
-    static QString componentVendorKey();
-    static QString componentDriveInfoKey();
-    static QString componentProtectionDomainKey();
-    static QString componentSizeKey();
-    static QString componentTypeKey();
-    static QString componentDescriptionKey();
-    static QString componentTimeKey();
-    static QString componentOperationTypeKey();
-    static QString componentInstallValue();
-    static QString componentUninstallValue();
-    static QString componentUpgradeValue();
-    static QString componentHiddenValue();
-private:
-    /**
-     * Pointer to a private implementation.
-     */
-    CaSoftwareRegistryPrivate *const m_d;
-
-    /**
-     * The static pointer to the instance of CaSoftwareRegistry.
-     */
-    static QWeakPointer<CaSoftwareRegistry> m_instance;
-
-    friend class CaSoftwareRegistryPrivate;
-    friend class QtSharedPointer::ExternalRefCount<CaSoftwareRegistry>;
-
-    Q_DISABLE_COPY(CaSoftwareRegistry)
-
-};
-
-#endif // CA_SOFTWARE_REGISTRY_H
--- a/homescreensrv_plat/contentstorage_api/cauninstallnotifier.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +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: canotifier.h
- *
- */
-
-#ifndef CAUINSTALLNOTIFIER_H
-#define CAUINSTALLNOTIFIER_H
-
-#include <QObject>
-#include <QSharedPointer>
-
-#include "caclient_global.h"
-class CaUninstallNotifierPrivate;
-
-class CaUninstallNotifier: public QObject
-{
-Q_OBJECT
-
-public:
-
-    static CaUninstallNotifier* notifier();
-
-private: 
-    
-    explicit CaUninstallNotifier(CaUninstallNotifierPrivate *const notifierPrivate);
-
-    virtual ~CaUninstallNotifier();
-
-signals:
-
-    /*!
-        A signal emited when the entry is changed.
-        \param entryId entry id.
-        \param changeType the type of the change.
-    */
-    void progressChange(int componentId, int progressValue);
-
-private:
-
-    CaUninstallNotifierPrivate * const m_d;
-    
-    static QSharedPointer<CaUninstallNotifier> mInstance;
-    
-    Q_DISABLE_COPY(CaUninstallNotifier)
-
-    friend class CaUninstallNotifierPrivate;
-    
-    friend class QtSharedPointer::ExternalRefCount<CaUninstallNotifier>;
-};
-
-
-#endif // CAUINSTALLNOTIFIER_H
--- a/homescreensrv_plat/contentstorage_api/contentstorage_api.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/homescreensrv_plat/contentstorage_api/contentstorage_api.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -15,15 +15,15 @@
 #
 
 PLATFORM_HEADERS += \
-                      contentstorage_api/caclient_global.h \
-                      contentstorage_api/cadefs.h \
-                      contentstorage_api/caentry.h \
-                      contentstorage_api/caicondescription.h \
-                      contentstorage_api/canotifier.h \
-                      contentstorage_api/canotifierfilter.h \
-                      contentstorage_api/caquery.h \
-                      contentstorage_api/caservice.h \
-                      contentstorage_api/caitemmodel.h \
-                      contentstorage_api/camenuiconutility.h \
-                      contentstorage_api/casoftwareregistry.h \
-                      contentstorage_api/cauninstallnotifier.h 
\ No newline at end of file
+                      contentstorage_api/inc/caclient_global.h \
+                      contentstorage_api/inc/cadefs.h \
+                      contentstorage_api/inc/caentry.h \
+                      contentstorage_api/inc/caicondescription.h \
+                      contentstorage_api/inc/canotifier.h \
+                      contentstorage_api/inc/canotifierfilter.h \
+                      contentstorage_api/inc/caquery.h \
+                      contentstorage_api/inc/caservice.h \
+                      contentstorage_api/inc/caitemmodel.h \
+                      contentstorage_api/inc/camenuiconutility.h \
+                      contentstorage_api/inc/casoftwareregistry.h \
+                      contentstorage_api/inc/cauninstallnotifier.h 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/caclient_global.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,44 @@
+/*
+ * 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 CACLIENT_GLOBAL_H
+#define CACLIENT_GLOBAL_H
+
+
+#ifdef CACLIENT_LIB
+#define CACLIENT_EXPORT Q_DECL_EXPORT
+#else
+#ifdef CACLIENT_TEST
+#define CACLIENT_EXPORT
+#else
+#define CACLIENT_EXPORT Q_DECL_IMPORT
+#endif
+#endif
+
+#ifndef CONTENTARSENAL_UNITTEST
+#define CA_CLIENT_TEST_CLASS(aClassName)
+#else
+#define CA_CLIENT_TEST_CLASS(aClassName) class aClassName;
+#endif
+
+#ifndef CONTENTARSENAL_UNITTEST
+#define CA_CLIENT_TEST_FRIEND_CLASS(aClassName)
+#else
+#define CA_CLIENT_TEST_FRIEND_CLASS(aClassName) friend class aClassName;
+#endif
+
+#endif // CACLIENT_GLOBAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/cadefs.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,95 @@
+/*
+ * 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: cadefs.h
+ *
+ */
+
+#ifndef CADEFS_H
+#define CADEFS_H
+
+#include <QFlags>
+#include <QMetaType>
+
+enum ChangeType
+{
+    AddChangeType,
+    RemoveChangeType,
+    UpdateChangeType
+};
+
+enum EntryRole
+{
+    ItemEntryRole = 1,
+    GroupEntryRole = 2
+};
+Q_DECLARE_FLAGS(EntryRoles, EntryRole)
+Q_DECLARE_OPERATORS_FOR_FLAGS(EntryRoles)
+
+enum SortAttribute
+{
+    NameSortAttribute,
+    CreatedTimestampSortAttribute,
+    MostUsedSortAttribute,
+    LastUsedSortAttribute,
+    DefaultSortAttribute
+// default - return items in custom order
+};
+
+enum EntryFlag
+{
+    UsedEntryFlag = 1,
+    UninstallEntryFlag = 2,
+    RemovableEntryFlag = 4,
+    VisibleEntryFlag = 8,
+    ReservedEntryFlag = 16, //flag is unused, stays for compatibility
+    NativeEntryFlag = 32,
+    MissingEntryFlag = 64
+};
+
+enum LocalizationType
+{
+    NameLocalized,
+    DescriptionLocalized
+};
+
+Q_DECLARE_FLAGS(EntryFlags, EntryFlag)
+Q_DECLARE_OPERATORS_FOR_FLAGS(EntryFlags)
+Q_DECLARE_METATYPE(EntryFlags)
+
+enum ErrorCode
+{
+    NoErrorCode = 0,
+    NotFoundErrorCode,
+    OutOfMemoryErrorCode,
+    BadArgumentErrorCode,
+    ServerTerminated,
+    UnknownErrorCode
+};
+
+const char caCmdOpen[] = "open";
+const char caCmdRemove[] = "remove";
+
+#ifndef QT_NO_DEBUG_OUTPUT
+#   define USE_QDEBUG_IF(predicate) if (!predicate) {} else qDebug()
+#else
+#   define USE_QDEBUG_IF(predicate) if (1) {} else qDebug()
+#endif
+
+#ifndef QT_NO_WARNING_OUTPUT
+#   define USE_QWARNING_IF(predicate) if (!predicate) {} else qWarning()
+#else
+#   define USE_QWARNING_IF(predicate) if (1) {} else qWarning()
+#endif
+
+#endif // CADEFS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/caentry.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: caentry.h
+ *
+ */
+
+#ifndef CAENTRY_H
+#define CAENTRY_H
+
+#include <QMap>
+#include <QSharedDataPointer>
+#include <QSize>
+
+#include "caclient_global.h"
+#include "cadefs.h"
+#include "caicondescription.h"
+
+CA_CLIENT_TEST_CLASS( TestCaClient )
+
+class CaObjectAdapter;
+class CaEntryPrivate;
+class HbIcon;
+
+class CACLIENT_EXPORT CaEntry
+{
+    /*!
+     * This class is not intended to be derived.
+     */
+
+public:
+
+    explicit CaEntry(EntryRole entryRole = ItemEntryRole);
+
+    virtual ~CaEntry();
+
+    int id() const;
+
+    QString text() const;
+    void setText(const QString &text, bool localized = false);
+
+    QString description() const;
+    void setDescription(const QString &text, bool localized = false);
+    
+    CaIconDescription iconDescription() const;
+    void setIconDescription(const CaIconDescription &iconDescription);
+
+    EntryFlags flags() const;
+    void setFlags(EntryFlags flags);
+
+    QString entryTypeName() const;
+    void setEntryTypeName(const QString &entryTypeName);
+
+    QMap<QString, QString> attributes() const;
+    QString attribute(const QString &name) const;
+    void setAttribute(const QString &name, const QString &value);
+    void removeAttribute(const QString &name);
+
+    HbIcon makeIcon(const QSizeF &size = QSizeF(70.0, 70.0)) const;
+
+    EntryRole role() const;
+
+    CaEntry(const CaEntry &entry);
+    CaEntry &operator=(const CaEntry &entry);
+
+private:
+
+    void setId(int id);
+    bool isLocalized(LocalizationType localized) const; 
+
+private:
+    /*!
+     * A special kind of pointer, supporting sharing data, to a private
+     * implementation.
+     */
+    QSharedDataPointer<CaEntryPrivate> m_d;
+
+    friend class CaEntryPrivate;
+    friend class ::CaObjectAdapter;
+
+    CA_CLIENT_TEST_FRIEND_CLASS( TestCaClient )
+
+};
+
+
+#endif // CAENTRY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/caicondescription.h	Wed Oct 06 16:00:22 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: caicondescription.h
+ *
+ */
+
+#ifndef CAICONDESCRIPTION_H
+#define CAICONDESCRIPTION_H
+
+#include <QSharedDataPointer>
+
+#include "caclient_global.h"
+
+class CaObjectAdapter;
+
+class CaIconDescriptionPrivate;
+
+class CACLIENT_EXPORT CaIconDescription
+{
+
+public:
+
+    CaIconDescription();
+    CaIconDescription(const CaIconDescription &iconDescription);
+    ~CaIconDescription();
+
+    CaIconDescription &operator=(const CaIconDescription &iconDescription);
+
+    int id() const;
+
+    QString filename() const;
+    void setFilename(const QString &filename);
+
+    QString skinId() const;
+    void setSkinId(const QString &skinId);
+
+    QString applicationId() const;
+    void setApplicationId(const QString &applicationId);
+
+private:
+
+    void setId(int id);
+
+private:
+    /**
+     * Pointer to a private implementation.
+     */
+    QSharedDataPointer<CaIconDescriptionPrivate> m_d;
+
+    friend class CaIconDescriptionPrivate;
+    friend class ::CaObjectAdapter;
+};
+
+#endif // CAICONDESCRIPTION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/caitemmodel.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,103 @@
+/*
+ * 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: caitemmodel.h
+ *
+ */
+
+#ifndef CASTANDARDITEMMODEL_H
+#define CASTANDARDITEMMODEL_H
+
+// System includes
+#include <QAbstractItemModel>
+#include <QAbstractItemView>
+
+// User includes
+#include "caclient_global.h"
+#include "caquery.h"
+
+// Forward declarations
+class CaEntry;
+class CaItemModelPrivate;
+CA_CLIENT_TEST_CLASS(TestCaClient)
+
+// Class declaration
+class CACLIENT_EXPORT CaItemModel: public QAbstractItemModel
+{
+
+Q_OBJECT
+    CA_CLIENT_TEST_FRIEND_CLASS(TestCaClient)
+
+public:
+
+    // Data types
+    enum CaItemRole
+    {
+        IdRole = Qt::UserRole + 1,
+        ParentIdRole,
+        TypeRole,
+        FlagsRole,
+        TextRole,//contains title represented as QString,
+        DescriptionRole, // contains item description
+        FullTextRole, //'title description' convinient for operations such as search
+        UninstalRole,  //contains progress status as decimal number in QString
+        CollectionTitleRole //contains title represented as QString,
+
+    };
+
+    // Function declarations
+    CaItemModel(const CaQuery &query, QObject *parent = 0);
+    ~CaItemModel();
+
+    int columnCount(const QModelIndex &parent = QModelIndex()) const;
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex index(int row, int column = 0,
+        const QModelIndex &parent = QModelIndex()) const;
+    virtual QModelIndex parent(const QModelIndex &index) const;
+    QModelIndex root() const;
+    virtual QVariant data(const QModelIndex &index, int role =
+        Qt::DisplayRole) const;
+    void setAutoUpdate(bool autoUpdate);
+    void setSecondLineVisibility(bool secondLineVisible);
+    bool secondLineVisibility() const;
+    bool isAutoUpdate() const;
+    void setSort(SortAttribute sortAttribute, Qt::SortOrder sortOrder =
+        Qt::AscendingOrder);
+    void setIconSize(const QSizeF &size);
+    QSizeF getIconSize() const;
+    void updateModel();
+    void setParentId(int parentId);
+    void setFlagsOn(const EntryFlags &onFlags);
+    void setFlagsOff(const EntryFlags &offFlags);
+    QSharedPointer<CaEntry> entry(const QModelIndex &index) const;
+
+    QList<int> getUninstallingEntriesIds(int componentId);
+    void updateProgress(int id, int valueOfProgress);
+
+    
+signals:
+
+    void scrollTo(int row, QAbstractItemView::ScrollHint hint =
+        QAbstractItemView::EnsureVisible);
+    void empty(bool value);
+    void countChange();
+    
+protected:
+    // data
+
+    CaItemModelPrivate * const m_d;
+    friend class CaItemModelPrivate;
+
+};
+
+#endif // CASTANDARDITEMMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/camenuiconutility.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* 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 API supports requesting raw bitmaps
+ *
+*/
+
+
+#ifndef __CAMENUICONUTILITY_H__
+#define __CAMENUICONUTILITY_H__
+
+#include "caclient_global.h"
+
+class CaEntry;
+class HbIcon;
+
+class CACLIENT_EXPORT CaMenuIconUtility 
+{
+public:
+    static HbIcon getApplicationIcon(int uid,
+            const QSizeF &size = QSizeF(50,80));
+    
+    static HbIcon getEntryIcon(const CaEntry& entry,
+            const QSizeF &size = QSizeF(50,80));
+};
+
+#endif // __CAMENUICONUTILITY_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/canotifier.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,89 @@
+/*
+ * 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: canotifier.h
+ *
+ */
+
+#ifndef CANOTIFIER_H
+#define CANOTIFIER_H
+
+#include <QObject>
+#include "cadefs.h"
+#include "caclient_global.h"
+#include "caentry.h"
+
+CA_CLIENT_TEST_CLASS( TestCaClient )
+
+
+class CaNotifierPrivate;
+class CaNotifierFilter;
+
+class CACLIENT_EXPORT CaNotifier: public QObject
+{
+Q_OBJECT
+
+public:
+
+    explicit CaNotifier(CaNotifierPrivate *const notifierPrivate);
+
+    virtual ~CaNotifier();
+
+signals:
+
+    /*!
+        A signal emited when the entry is changed.
+        \param entryId entry id.
+        \param changeType the type of the change.
+    */
+    void entryChanged(int entryId, ChangeType changeType);
+
+    /*!
+        A signal emited when the entry is changed.
+        \param entry changed entry.
+        \param changeType the type of the change.
+    */
+    void entryChanged(const CaEntry &entry, ChangeType changeType);
+
+    /*!
+        A signal emited when the entry is touched.
+        \param id entry id.
+    */
+    void entryTouched(int id);
+
+    /*!
+        A signal emited when group content is changed.
+        \param groupId group id.
+    */
+    void groupContentChanged(int groupId);
+
+protected:
+
+    virtual void connectNotify(const char * signal);
+
+    virtual void disconnectNotify(const char * signal);
+
+private:
+
+    CaNotifierPrivate * const m_d;
+
+    Q_DISABLE_COPY(CaNotifier)
+
+    friend class CaNotifierPrivate;
+
+    CA_CLIENT_TEST_FRIEND_CLASS( TestCaClient )
+
+};
+
+
+#endif // CANOTIFIER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/canotifierfilter.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,60 @@
+/*
+ * 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: canotifierfilter.h
+ *
+ */
+
+#ifndef CANOTIFIERFILTER_H
+#define CANOTIFIERFILTER_H
+
+#include <QList>
+
+#include "cadefs.h"
+#include "caclient_global.h"
+#include "caentry.h"
+
+class CaNotifierFilterPrivate;
+class CaQuery;
+
+class CACLIENT_EXPORT CaNotifierFilter
+{
+    friend class CaNotifierFilterPrivate;
+
+public:
+
+    CaNotifierFilter();
+    CaNotifierFilter(const CaNotifierFilter &notifierFilter);
+    explicit CaNotifierFilter(const CaQuery &query);
+    CaNotifierFilter &operator=(const CaNotifierFilter &notifierFilter);
+    virtual ~CaNotifierFilter();
+
+    int getParentId() const;
+    void setParentId(int parentId);
+
+    QList<int> getIds() const;
+    void setIds(const QList<int> &ids);
+
+    EntryRoles getEntryRole() const;
+    void setEntryRole(EntryRoles entryRole);
+
+    QStringList getTypeNames() const;
+    void setTypeNames(const QStringList &typeNames);
+
+private:
+
+    CaNotifierFilterPrivate * const m_d;
+
+};
+
+#endif // CANOTIFIERFILTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/caquery.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,81 @@
+/*
+ * 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: caquery.h
+ *
+ */
+
+#ifndef CAQUERY_H
+#define CAQUERY_H
+
+#include <QStringList>
+#include "caclient_global.h"
+#include "cadefs.h"
+
+class CaQueryPrivate;
+
+class CACLIENT_EXPORT CaQuery
+{
+
+public:
+
+    CaQuery();
+    CaQuery(const CaQuery &query);
+    CaQuery &operator=(const CaQuery &query);
+    ~CaQuery();
+
+    void setEntryRoles(EntryRoles entryRoles);
+    EntryRoles entryRoles() const;
+
+    void setParentId(int id);
+    int parentId() const;
+
+    void setChildId(int id);
+    int childId() const;
+
+    void setEntryTypeNames(const QStringList &entryTypeNames);
+    QStringList entryTypeNames() const;
+
+    void addEntryTypeName(const QString &entryTypeName);
+
+    void setFlagsOn(const EntryFlags &onFlags);
+    EntryFlags flagsOn() const;
+    void setFlagsOff(const EntryFlags &offFlags);
+    EntryFlags flagsOff() const;
+
+    void setSort(SortAttribute sortAttribute, 
+        Qt::SortOrder sortOrder = Qt::AscendingOrder);
+    void getSort(SortAttribute& sortAttribute, 
+        Qt::SortOrder& sortOrder) const;
+
+    unsigned int count() const;
+    void setCount(unsigned int count);
+
+    QMap<QString, QString> attributes() const;
+    QString attribute(const QString &name) const;
+    void setAttribute(const QString &name, const QString &value);
+    void removeAttribute(const QString &name);
+    
+    void clear();
+
+private:
+
+    /**
+     * Pointer to a private implementation.
+     */
+    CaQueryPrivate * const m_d;
+    friend class CaQueryPrivate;
+
+};
+
+#endif // CAQUERY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/caservice.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,133 @@
+/*
+ * 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: caservice.h
+ *
+ */
+
+#ifndef CASERVICE_H
+#define CASERVICE_H
+
+#include <QObject>
+#include <QSharedPointer>
+
+#include <cadefs.h>
+
+#include "caclient_global.h"
+#include "canotifierfilter.h"
+
+class CaQuery;
+class CaEntry;
+class CaServicePrivate;
+class CaNotifier;
+
+class CACLIENT_EXPORT CaService: public QObject
+{
+
+Q_OBJECT
+
+    explicit CaService(QObject *parent = 0);
+
+    ~CaService();
+
+public:
+
+    static QSharedPointer<CaService> instance();
+
+    QSharedPointer<CaEntry> getEntry(int entryId) const;
+    QList< QSharedPointer<CaEntry> > getEntries(const QList<int> &entryIdList) const;
+    QList< QSharedPointer<CaEntry> > getEntries(const CaQuery &query) const;
+    QList<int> getEntryIds(const CaQuery &query) const;
+
+    QSharedPointer<CaEntry> createEntry(const CaEntry &entry) const;
+
+    bool removeEntry(int entryId) const;
+    bool removeEntry(const CaEntry &entry) const;
+    bool removeEntries(const QList<int> &entryIdList) const;
+    bool removeEntries(const QList< QSharedPointer<CaEntry> > &entryList) const;
+
+    bool updateEntry(const CaEntry &entry) const;
+    bool touch(const CaEntry &entry) const;
+
+    bool insertEntryIntoGroup(int groupId, int entryId,
+        int beforeEntryId) const;
+    bool insertEntryIntoGroup(const CaEntry &group, const CaEntry &entry,
+        int beforeEntryId) const;
+    bool insertEntriesIntoGroup(int groupId, const QList<int> &entryIdList,
+        int beforeEntryId) const;
+    bool insertEntriesIntoGroup(const CaEntry &group,
+        const QList< QSharedPointer<CaEntry> > &entryList, int beforeEntryId) const;
+
+    bool removeEntryFromGroup(int groupId, int entryId) const;
+    bool removeEntryFromGroup(const CaEntry &group,
+        const CaEntry &entry) const;
+    bool removeEntriesFromGroup(int groupId,
+        const QList<int> &entryIdList) const;
+    bool removeEntriesFromGroup(const CaEntry &group,
+        const QList< QSharedPointer<CaEntry> > &entryList) const;
+
+    bool appendEntryToGroup(int groupId, int entryId) const;
+    bool appendEntryToGroup(const CaEntry &group,
+        const CaEntry &entry) const;
+    bool appendEntriesToGroup(int groupId,
+        const QList<int> &entryIdList) const;
+    bool appendEntriesToGroup(const CaEntry &group,
+        const QList< QSharedPointer<CaEntry> > &entryList) const;
+
+    bool prependEntryToGroup(int groupId, int entryId) const;
+    bool prependEntryToGroup(const CaEntry &group,
+        const CaEntry &entry) const;
+    bool prependEntriesToGroup(int groupId,
+        const QList<int> &entryIdList) const;
+    bool prependEntriesToGroup(const CaEntry &group,
+        const QList< QSharedPointer<CaEntry> > &entryList) const;
+
+    int executeCommand(int entryId, const QString &command = 
+        caCmdOpen, QObject* receiver = NULL, const char* member = NULL) const;
+    int executeCommand(const CaEntry &entry, const QString &command =
+        caCmdOpen, QObject* receiver = NULL, const char* member = NULL) const;
+
+    CaNotifier * createNotifier(const CaNotifierFilter &filter) const;
+
+    bool customSort(int groupId, QList<int> &entryIdList) const;
+
+    ErrorCode lastError() const;
+
+signals:
+
+    void entryChanged(int entryId, ChangeType changeType);
+    void entryChanged(const CaEntry &entry, ChangeType changeType);
+    void entryTouched(int id);
+    void groupContentChanged(int groupId);
+
+private:
+
+    /**
+     * Pointer to a private implementation.
+     */
+    CaServicePrivate * const m_d;
+
+    /**
+     * The static pointer to the instance of CaService.
+     */
+    static QWeakPointer<CaService> m_instance;
+
+    friend class CaServicePrivate;
+    friend class QtSharedPointer::ExternalRefCount<CaService>;
+
+    Q_DISABLE_COPY(CaService)
+
+};
+
+
+#endif // CASERVICE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/casoftwareregistry.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  ?Description
+ *
+ */
+
+#ifndef CA_SOFTWARE_REGISTRY_H
+#define CA_SOFTWARE_REGISTRY_H
+
+#include <QHash>
+#include <QObject>
+#include <QSharedPointer>
+#include <QString>
+
+#include "caclient_global.h"
+
+//FORWARD DECLARATIONS
+class QStringList;
+class CaSoftwareRegistryPrivate;
+class CaUninstallNotifier;
+
+/**
+ * Class provides Usif specific services
+ */
+class CACLIENT_EXPORT CaSoftwareRegistry: public QObject
+{
+
+Q_OBJECT
+
+    explicit CaSoftwareRegistry(QObject *parent = 0);
+
+    ~CaSoftwareRegistry();
+
+public:
+
+    static QSharedPointer<CaSoftwareRegistry> create();
+
+    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;
+
+    QList<DetailMap> retrieveLogEntries() const;
+    
+    CaUninstallNotifier *createUninstallNotifier() const;
+
+    static QString componentNameKey();
+    static QString componentVersionKey();
+    static QString componentVendorKey();
+    static QString componentDriveInfoKey();
+    static QString componentProtectionDomainKey();
+    static QString componentSizeKey();
+    static QString componentTypeKey();
+    static QString componentDescriptionKey();
+    static QString componentTimeKey();
+    static QString componentOperationTypeKey();
+    static QString componentInstallValue();
+    static QString componentUninstallValue();
+    static QString componentUpgradeValue();
+    static QString componentHiddenValue();
+
+private:
+    /**
+     * Pointer to a private implementation.
+     */
+    CaSoftwareRegistryPrivate *const m_d;
+
+    /**
+     * The static pointer to the instance of CaSoftwareRegistry.
+     */
+    static QWeakPointer<CaSoftwareRegistry> m_instance;
+
+    friend class CaSoftwareRegistryPrivate;
+    friend class QtSharedPointer::ExternalRefCount<CaSoftwareRegistry>;
+
+    Q_DISABLE_COPY(CaSoftwareRegistry)
+
+};
+
+#endif // CA_SOFTWARE_REGISTRY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/inc/cauninstallnotifier.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,64 @@
+/*
+ * 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: canotifier.h
+ *
+ */
+
+#ifndef CAUINSTALLNOTIFIER_H
+#define CAUINSTALLNOTIFIER_H
+
+#include <QObject>
+#include <QSharedPointer>
+
+#include "caclient_global.h"
+class CaUninstallNotifierPrivate;
+
+class CaUninstallNotifier: public QObject
+{
+Q_OBJECT
+
+public:
+
+    static CaUninstallNotifier* notifier();
+
+private: 
+    
+    explicit CaUninstallNotifier(CaUninstallNotifierPrivate *const notifierPrivate);
+
+    virtual ~CaUninstallNotifier();
+
+signals:
+
+    /*!
+        A signal emited when the entry is changed.
+        \param entryId entry id.
+        \param changeType the type of the change.
+    */
+    void progressChange(int componentId, int progressValue);
+
+private:
+
+    CaUninstallNotifierPrivate * const m_d;
+    
+    static QSharedPointer<CaUninstallNotifier> mInstance;
+    
+    Q_DISABLE_COPY(CaUninstallNotifier)
+
+    friend class CaUninstallNotifierPrivate;
+    
+    friend class QtSharedPointer::ExternalRefCount<CaUninstallNotifier>;
+};
+
+
+#endif // CAUINSTALLNOTIFIER_H
Binary file homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/armv5/sapiapp_S60_3_X_v_1_0_0.SISX has changed
Binary file homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/castorage.db has changed
Binary file homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/emailTest.qm has changed
Binary file homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/inc/t_caclient.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,124 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#ifndef T_CACLIENT_H
+#define T_CACLIENT_H
+
+#include <QtTest/QtTest>
+#include "cadefs.h"
+
+#ifdef Q_OS_SYMBIAN
+#include <e32std.h>
+#endif
+
+class CaService;
+class CaEntry;
+class CaItemModel;
+
+/**
+ * @test Test class for hsmcsserviceprovider library.
+ */
+class TestCaClient : public QObject
+{
+    Q_OBJECT
+
+private slots:
+
+    /**
+     * initialize
+     */
+    void initTestCase();
+    
+    // contentsorage_api - caservice
+    void Test_instance();
+    
+    void Test_getEntry();
+    void Test_getEntries_ByIds();
+    void Test_getEntries_ByQuery();
+    
+    void Test_createEntry();
+
+    void Test_removeEntry_ById();
+    void Test_removeEntry_ByEntry();
+    void Test_removeEntries_ByIds();
+    void Test_RemoveEntries_ByEntries();
+    
+    void Test_epdateEntry();
+    void Test_touch();
+    
+    void Test_insertEntryIntoGroup_ById();
+    void Test_insertEntryIntoGroup_ByEntry();
+    void Test_insertEntriesIntoGroup_ByIds();
+    void Test_insertEntriesIntoGroup_ByEntries();
+    
+    void Test_removeEntryFromGroup_ById();
+    void Test_removeEntryFromGroup_ByEntry();
+    void Test_removeEntriesFromGroup_ByIds();
+    void Test_removeEntriesFromGroup_ByEntries();
+    
+    void Test_appendEntryToGroup_ById();
+    void Test_appendEntryToGroup_ByEntry();
+    void Test_appendEntriesToGroup_ByIds();
+    void Test_appendEntriesToGroup_ByEntries();
+    
+    void Test_prependEntryToGroup_ById();
+    void Test_prependEntryToGroup_ByEntry();
+    void Test_prependEntriesToGroup_ByIds();
+    void Test_prependEntriesToGroup_ByEntries();
+#ifdef Q_OS_SYMBIAN
+    void Test_executeCommand_ById();
+    void Test_executeCommand_ByEntry();
+#endif //Q_OS_SYMBIAN
+    
+    void Test_createNotifier();
+    void Test_customSort();
+    void Test_lastError();
+
+    // contentsorage_api - camenuiconutility
+    void Test_getApplicationIcon();
+    void Test_getEntryIcon();
+    
+    /**
+     * cleanup
+     */
+    void cleanupTestCase();
+
+private:
+    void startThread();
+    void stopThread();
+    // utility methods
+    QSharedPointer<CaEntry>  createGroup(const QString &groupName, const QString &typeName);
+    QSharedPointer<CaEntry> createItem(const QString &itemName, const QString &description,
+                        const QString &typeName, EntryFlags flags);
+    QSharedPointer<CaEntry> createItem(const QString &itemName, const QString &typeName);
+    void addItemToGroup(int groupId, int itemId);
+    void removeItemFromGroup(int groupId, int itemId);
+    void removeEntry(int entryId);
+    bool removeEntry(const QString &entryName);
+    QString itemName(const CaItemModel &model, int row);
+    void terminatServer();
+
+#ifdef Q_OS_SYMBIAN
+    RThread iThread;
+#endif //Q_OS_SYMBIAN
+
+private:
+    QSharedPointer<CaService> mService;
+};
+
+
+#endif//T_CACLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/inc/t_caclientnotifier.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,76 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#ifndef T_CACLIENTNOTIFIER_H
+#define T_CACLIENTNOTIFIER_H
+
+#include <QObject>
+#include <QList>
+#include "cadefs.h"
+
+class CaEntry;
+class CaNotifierFilter;
+class CaNotifier;
+class CaService;
+
+/**
+ * @test Test class for hsmcsserviceprovider library.
+ */
+class TestCaClientNotifier : public QObject
+{
+    Q_OBJECT
+
+public:
+
+    TestCaClientNotifier();
+    TestCaClientNotifier(const CaService &service, CaNotifierFilter *filter = 0);
+    ~TestCaClientNotifier();
+
+    CaNotifier *getNotifier() const;
+    CaNotifierFilter *getFilter() const;
+    void clean();
+
+public slots:
+
+    void entryChanged(int entryId, ChangeType changeType);
+    void entryChanged(const CaEntry &entry, ChangeType changeType);
+    void entryTouched(int id);
+    void groupContentChanged(int groupId);
+
+public:
+
+    int mEntryId;
+    int mGroupId;
+    ChangeType mChangeType;
+    CaEntry *mEntry;
+
+    int mCount;
+    QList<int> *mEntryIds;
+    QList<int> *mGroupIds;
+    QList<ChangeType> *mChangeTypes;
+    QList<const CaEntry *> *mEntries;
+
+    CaNotifierFilter *mFilter;
+    CaNotifier *mNotifier;
+
+private:
+
+    Q_DISABLE_COPY(TestCaClientNotifier)
+
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_createupdate.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,231 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_instance()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        QVERIFY(!service.isNull());
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_lastError()
+{
+    {
+        //create item
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+        item.setDescription("description");
+        CaIconDescription iconDescription;
+        iconDescription.setFilename("iconFileName");
+        iconDescription.setSkinId("iconSkinId");
+        iconDescription.setApplicationId("268458321");
+
+        item.setIconDescription(iconDescription);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem = service->createEntry(item);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        //Cleanup
+        service->removeEntry(*resultItem);
+        QCOMPARE(service->lastError(), NoErrorCode);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_createEntry()
+{
+    {
+        const CaEntry constItem;
+        QCOMPARE(constItem.role(), ItemEntryRole);
+
+        //create item
+        //check if proper entry returned
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+        item.setDescription("description");
+        CaIconDescription iconDescription;
+        iconDescription.setFilename("iconFileName");
+        iconDescription.setSkinId("iconSkinId");
+        iconDescription.setApplicationId("268458321");
+
+        item.setIconDescription(iconDescription);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem = service->createEntry(item);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        QVERIFY(!resultItem.isNull());
+        QCOMPARE(resultItem->role(), ItemEntryRole);
+        QCOMPARE(item.text(),resultItem->text());
+        QCOMPARE(item.description(),resultItem->description());
+        QCOMPARE(item.entryTypeName(),resultItem->entryTypeName());
+        QCOMPARE(QString("attrVal1"),resultItem->attribute("attrName1"));
+        QCOMPARE(item.flags(),resultItem->flags());
+        int itId =item.id();
+        int resItId =resultItem->id();
+        QVERIFY(itId != resItId);
+        QCOMPARE(iconDescription.filename(),resultItem->iconDescription().filename());
+        QCOMPARE(iconDescription.skinId(),resultItem->iconDescription().skinId());
+        QCOMPARE(iconDescription.applicationId(),resultItem->iconDescription().applicationId());
+
+        // entry from storage
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem->id());
+        QVERIFY(storageItem1);
+        QCOMPARE(QString("testName"),storageItem1->text());
+        QCOMPARE(QString("description"),storageItem1->description());
+        QCOMPARE(QString("test"),storageItem1->entryTypeName());
+        QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1"));
+        EntryFlags flags = item.flags();
+        EntryFlags storageFlags = storageItem1->flags();
+        QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename());
+        QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId());
+        QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId());
+        QVERIFY(storageItem1->iconDescription().id() > 0);
+
+        QCOMPARE(flags ,storageFlags);
+
+        //Cleanup
+        service->removeEntry(*resultItem);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_epdateEntry()
+{
+    {
+        CaEntry item1;
+        item1.setText("testName");
+        item1.setAttribute("attrName1", "attrVal1");
+        item1.setEntryTypeName("test");
+        item1.setFlags(RemovableEntryFlag);
+        CaIconDescription iconDescription1;
+        iconDescription1.setFilename("iconFileName");
+        iconDescription1.setSkinId("iconSkinId");
+        iconDescription1.setApplicationId("268458321"); //Bluetouth app UID
+        item1.setIconDescription(iconDescription1);
+
+        CaIconDescription iconDescription2;
+        iconDescription2.setFilename("iconFileName2");
+        iconDescription2.setSkinId("iconSkinId2");
+        iconDescription2.setApplicationId("537001519"); //SW update app UID
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item1);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        QVERIFY(!resultItem1.isNull());
+
+        int id1 = resultItem1->id();
+        resultItem1->setText("testName2");
+        resultItem1->setAttribute("attrName2", "attrVal2");
+        resultItem1->setAttribute("attrName1", "attrVal2");
+        resultItem1->setEntryTypeName("test2");
+        resultItem1->setFlags(UninstallEntryFlag);
+        resultItem1->setIconDescription(iconDescription2);
+
+        bool updateResult1 = service->updateEntry(item1);
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!updateResult1);  // no id -> return false
+
+        bool updateResult2 = service->updateEntry(*resultItem1);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        QVERIFY(updateResult2);  // id present -> true
+
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(*resultItem1);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        QVERIFY(!resultItem2.isNull());
+
+        int id2 = resultItem2->id();
+        QVERIFY(id1 != id2);   //entry clone created
+
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(id1);
+        QVERIFY(!storageItem1.isNull());
+
+        QSharedPointer<CaEntry> storageItem2 = service->getEntry(id2);
+        QVERIFY(!storageItem2.isNull());
+
+        // check if attributes were updated
+        QCOMPARE(QString("testName2"),storageItem1->text());
+        QCOMPARE(QString("test2"),storageItem1->entryTypeName());
+
+        QCOMPARE(QString("attrVal2"),storageItem1->attribute("attrName1"));
+        QCOMPARE(QString("attrVal2"),storageItem1->attribute("attrName2"));
+        QCOMPARE(resultItem1->flags(),storageItem1->flags());
+        QCOMPARE(iconDescription2.filename(),storageItem1->iconDescription().filename());
+        QCOMPARE(iconDescription2.skinId(),storageItem1->iconDescription().skinId());
+        QCOMPARE(iconDescription2.applicationId(),storageItem1->iconDescription().applicationId());
+        // cloned item should have the same attributes
+        QCOMPARE(QString("testName2"),storageItem2->text());
+        QCOMPARE(QString("test2"),storageItem2->entryTypeName());
+        QCOMPARE(QString("attrVal2"),storageItem2->attribute("attrName1"));
+        QCOMPARE(QString("attrVal2"),storageItem2->attribute("attrName2"));
+        QCOMPARE(resultItem1->flags(),storageItem2->flags());
+
+        //Cleanup
+        service->removeEntry(id1);
+        service->removeEntry(id2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::terminatServer()
+{
+    TFindProcess processFinder;
+    processFinder.Find(_L("camenuserver*"));
+    TFullName caName;
+    while ( KErrNone == processFinder.Next( caName ) ) {
+        RProcess caProcess;
+        TInt err = caProcess.Open(caName);
+        if( KErrNone ==  err ) {
+            caProcess.Terminate(0);
+        }
+        caProcess.Close();
+    }
+}
+
+QTEST_MAIN(TestCaClient)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_entryquery.cpp	Wed Oct 06 16:00:22 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#include <HbIcon>
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+#include "calocalizationentry.h"
+#include "camenuiconutility.h"
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_getEntryIcon()
+{
+    {
+    CaEntry entry;
+    entry.setEntryTypeName(QString("application"));
+    QSizeF size(50,50);
+    
+    HbIcon icon = CaMenuIconUtility::getEntryIcon(entry, size);
+    QVERIFY(icon.size().isValid());
+    QVERIFY(icon.height() > 0);
+    QVERIFY(icon.width() > 0);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_getApplicationIcon()
+{
+    {
+    int uid = 270495019; // contest mbm icon
+    QSizeF size(50,50);
+    
+    HbIcon icon = CaMenuIconUtility::getApplicationIcon(uid,size);
+    
+    QVERIFY(icon.size().isValid());
+    QVERIFY(icon.height() > 0);
+    QVERIFY(icon.width() > 0);
+    
+    int uid2 = 537006483; // AknConf mif icon
+    HbIcon icon2 = CaMenuIconUtility::getApplicationIcon(uid2,size);
+    QVERIFY(icon2.size().isValid());
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_executecommand.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+
+#ifdef Q_OS_SYMBIAN
+//s60
+#include <e32base.h>
+
+#include <W32STD.H>
+#include <APGTASK.H>
+
+#include "t_cainstaller.h"
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_executeCommand_ById()
+{
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> entry;
+        CaQuery query;
+        query.setEntryRoles(ItemEntryRole);
+        QList< QSharedPointer<CaEntry> > items = service->getEntries(query);
+        int itemsCount = items.count();
+        QVERIFY(itemsCount >0);
+        for (int i=0; i< itemsCount; i++) {
+            QString tmp = items[i]->text();
+            if (items[i]->text() == "Contacts") {
+                entry=items[i];
+                break;
+            }
+        }
+        QVERIFY(entry);
+        bool result = service->executeCommand(entry->id(), "open") == 0;
+        QTest::qWait(2500);
+        QVERIFY2(result, "Command *open* failed");
+        RWsSession session;
+        TInt error = session.Connect();
+        TApaTaskList taskList(session);
+        TApaTask task = taskList.FindApp(_L("Contacts"));
+        QTest::qWait(250);
+        bool taskExists(false);
+        if (task.Exists()) {
+            taskExists = true;
+            task.EndTask();
+        }
+        QTest::qWait(250);
+        session.Close();
+        QTest::qWait(250);
+        QVERIFY(taskExists);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_executeCommand_ByEntry()
+{
+    {
+
+        _LIT(KAppTestFile, "c:\\testing\\data\\t_caclient\\installs\\sapiapp_S60_3_X_v_1_0_0.sisx");
+        CaQuery query;
+        QSharedPointer<CaService> service = CaService::instance();
+        CaEntry *entry;
+        CaEntry *entryPhonebook;
+        QTest::qWait(250);
+        QStringList list("application");
+        query.setEntryTypeNames(list);
+        query.setFlagsOn(VisibleEntryFlag);
+        RFs TheFs;
+        User::LeaveIfError(TheFs.Connect());
+        
+        QScopedPointer<T_CaInstaller> installer;
+        QT_TRAP_THROWING(installer.reset(T_CaInstaller::NewL()));
+        
+        installer->InstallL( KAppTestFile );
+
+        QTest::qWait(30000);
+        
+        QList< QSharedPointer<CaEntry> > items = service->getEntries(query);
+        
+        int itemsCountAndOne = items.count();
+
+        for (int i=0; i< items.count(); i++) {
+            QString tmp = items[i]->text();
+            if (items[i]->text() == "Contacts") {
+                entryPhonebook=items[i].data();
+                break;
+            }
+        }
+
+        for (int i=0; i< itemsCountAndOne; i++) {
+            if (items[i]->text() == "sapiapp") {
+                entry=items[i].data();
+                break;
+            }
+        }
+        //entry attribute will be removed by appscanner
+        //after "sapiapp" entry is removed
+        QVERIFY2(entry, "Sapi app has not installed");
+        entryPhonebook->setAttribute("mmc_id","0x12345678");
+        service->updateEntry(*entryPhonebook);
+        bool result = false;
+        if (entry->id() > 0) {
+            result = service->executeCommand(*entry, "remove") == 0;
+        }
+        QVERIFY2(result, "Remove command returns false");
+        QTest::qWait(40000);
+        
+        QList< QSharedPointer<CaEntry> > itemsNew = service->getEntries(query);
+        int itemsCount = itemsNew.count();
+
+        QVERIFY2(itemsCountAndOne == itemsCount +1 , "Remove unsuccessful");
+
+    }
+}
+
+
+#endif //Q_OS_SYMBIAN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_getentries.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,188 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_getEntry()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        CaIconDescription iconDescription;
+        iconDescription.setFilename("iconFileName");
+        iconDescription.setSkinId("iconSkinId");
+        iconDescription.setApplicationId("268458321");
+        item.setIconDescription(iconDescription);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem = service->createEntry(item);
+
+        QVERIFY(!resultItem.isNull());
+        // entry from storage
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem->id());
+        QCOMPARE(service->lastError(), NoErrorCode);
+        QVERIFY(storageItem1);
+        QCOMPARE(storageItem1->role(), ItemEntryRole);
+        QCOMPARE(QString("testName"),storageItem1->text());
+        QCOMPARE(QString("test"),storageItem1->entryTypeName());
+        QCOMPARE(QString("attrVal1"),storageItem1->attribute("attrName1"));
+        QCOMPARE(item.flags(),storageItem1->flags());
+        QCOMPARE(iconDescription.filename(),storageItem1->iconDescription().filename());
+        QCOMPARE(iconDescription.skinId(),storageItem1->iconDescription().skinId());
+        QCOMPARE(iconDescription.applicationId(),storageItem1->iconDescription().applicationId());
+        QSharedPointer<CaEntry> storageItem2 = service->getEntry(9999);
+        QVERIFY(service->lastError() !=  NoErrorCode);
+        QVERIFY(!storageItem2);
+
+        //Cleanup
+        service->removeEntry(*resultItem);
+
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_getEntries_ByIds()
+{
+    {
+        CaEntry item;
+        item.setText("testName1");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item);
+        item.setText("testName2");
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item);
+        item.setText("testName3");
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item);
+        QVERIFY(!resultItem1.isNull());
+        QVERIFY(!resultItem2.isNull());
+        QVERIFY(!resultItem3.isNull());
+
+        QList<int> ids;
+        ids.append(resultItem1->id());
+        ids.append(resultItem3->id());
+        ids.append(resultItem2->id());
+
+        QList< QSharedPointer<CaEntry> > entries = service->getEntries(ids) ;
+        QCOMPARE(entries.count(), 3);
+        QCOMPARE(service->lastError(), NoErrorCode);
+
+        QVERIFY(entries.at(0));
+        QCOMPARE(entries.at(0)->role(), ItemEntryRole);
+        QCOMPARE(QString("testName1"),entries.at(0)->text());
+        QCOMPARE(QString("test"),entries.at(0)->entryTypeName());
+        QCOMPARE(QString("attrVal1"),entries.at(0)->attribute("attrName1"));
+        QCOMPARE(item.flags(),entries.at(0)->flags());
+        QVERIFY(entries.at(1));
+        QCOMPARE(entries.at(1)->role(), ItemEntryRole);
+        QCOMPARE(QString("testName3"),entries.at(1)->text());
+        QCOMPARE(QString("test"),entries.at(1)->entryTypeName());
+        QCOMPARE(QString("attrVal1"),entries.at(1)->attribute("attrName1"));
+        QCOMPARE(item.flags(),entries.at(1)->flags());
+        QVERIFY(entries.at(2));
+        QCOMPARE(entries.at(2)->role(), ItemEntryRole);
+        QCOMPARE(QString("testName2"),entries.at(2)->text());
+        QCOMPARE(QString("test"),entries.at(2)->entryTypeName());
+        QCOMPARE(QString("attrVal1"),entries.at(2)->attribute("attrName1"));
+        QCOMPARE(item.flags(),entries.at(2)->flags());
+
+        QCOMPARE(entries.at(0)->id(),resultItem1->id());
+        QCOMPARE(entries.at(1)->id(),resultItem3->id());
+        QCOMPARE(entries.at(2)->id(),resultItem2->id());
+
+        QList<int> ids2;
+        ids2.append(resultItem1->id());
+        ids2.append(9999);
+
+        QList< QSharedPointer<CaEntry> > entries2 = service->getEntries(ids2) ;
+        QCOMPARE(entries2.count(), 1);
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        //Cleanup
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+        service->removeEntry(*resultItem3);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_getEntries_ByQuery()
+{
+    {
+        //CHECK INITIAL STATE IN DB
+        QSharedPointer<CaService> service = CaService::instance();
+        CaQuery query;
+        QStringList strList;
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        query.addEntryTypeName(QString("test_item2"));
+        QList< QSharedPointer<CaEntry> > entries12 = service->getEntries(query);
+        int count12Before = entries12.count();
+
+        //ADD TEST DATA TO THE STORAGE
+        CaEntry item1;
+        item1.setText("testName_item1");
+        item1.setAttribute("attrName1_item", "attrVal1_item");
+        item1.setEntryTypeName("test_item1");
+        CaEntry item2;
+        item2.setText("testName_item2");
+        item2.setAttribute("attrName2_item", "attrVal2_item");
+        item2.setEntryTypeName("test_item2");
+
+        QSharedPointer<CaEntry> resultEntry1 = service->createEntry(item1);
+        QSharedPointer<CaEntry> resultEntry2 = service->createEntry(item2);
+        QVERIFY(!resultEntry1.isNull());
+        QVERIFY(!resultEntry2.isNull());
+
+        //GET STATE FROM THE STORAGE AFTER ADD
+        strList.clear();
+        strList << QString("test_item1");
+        query.setEntryTypeNames(strList);
+        query.addEntryTypeName(QString("test_item2"));
+        entries12 = service->getEntries(query);
+        QCOMPARE(service->lastError(), NoErrorCode);
+        int count12After = entries12.count();
+
+        //CHECK RESULTS
+        QCOMPARE(count12Before+2,count12After);
+
+        //CLEANUP THE STORAGE AFTER THE TEST
+        service->removeEntry(*resultEntry1);
+        service->removeEntry(*resultEntry2);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_notifier.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,206 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#include <QScopedPointer>
+#include <qservicemanager.h>
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "canotifier.h"
+#include "canotifierfilter.h"
+#include "caquery.h"
+#include "t_caclientNotifier.h"
+
+const int entryIdFake(-1);
+const int waitTime500ms(500);
+const int waitTime1sec(1000);
+
+QTM_USE_NAMESPACE
+
+QStringList pluginPaths;
+QString xmlName("caapphandlerplugin.xml");
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::initTestCase()
+{
+#ifdef Q_OS_SYMBIAN
+    startThread();
+#endif //Q_OS_SYMBIAN
+    mService = CaService::instance();
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::cleanupTestCase()
+{
+#ifdef Q_OS_SYMBIAN
+    stopThread();
+#endif //Q_OS_SYMBIAN
+    QSharedPointer<CaService> serviceNull(NULL);
+    mService = serviceNull;
+    QTest::qWait(5000);
+}
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+int threadFunction(void */*params*/)
+{
+#ifdef Q_OS_SYMBIAN
+    while (ETrue) {
+        User::ResetInactivityTime();//it should help for Viewserver11 panic
+        User::After(5000000);
+    }
+#endif //Q_OS_SYMBIAN
+    return 0;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::startThread()
+{
+#ifdef Q_OS_SYMBIAN
+    User::LeaveIfError(iThread.Create(
+                           _L("thread_kill_viewsrv11"),
+                           threadFunction,
+                           16384,
+                           4000,
+                           4000,
+                           NULL));
+    iThread.Resume();
+#endif //Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::stopThread()
+{
+#ifdef Q_OS_SYMBIAN
+    iThread.Close();
+#endif //Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_createNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        CaNotifierFilter *filter = new CaNotifierFilter();
+        filter->setEntryRole(GroupEntryRole);
+        filter->setTypeNames(QStringList() << "TypeName");
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry group(GroupEntryRole);
+        group.setText("Text");
+        group.setEntryTypeName("TypeName");
+
+        QSharedPointer<CaEntry> entry = mService->createEntry(group);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntry(entry->id());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_touch()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+
+    CaNotifierFilter *filter = new CaNotifierFilter();
+    filter->setEntryRole(ItemEntryRole);
+    filter->setIds(QList<int>() << entry->id());
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+
+    bool touched = mService->touch(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+    QCOMPARE(touched, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    delete filter;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+//QTEST_MAIN(homescreen::test::TestCaClient)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_organize.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,859 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_appendEntryToGroup_ById()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntryToGroup(9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->appendEntryToGroup(group->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(service->appendEntryToGroup(group->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->appendEntryToGroup(group->id(), entry2->id()));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_appendEntryToGroup_ByEntry()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntryToGroup(groupEntry, *entry1));
+        QVERIFY(!service->appendEntryToGroup(*group , itemEntry));
+        QVERIFY(service->appendEntryToGroup(*group , *entry1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->appendEntryToGroup(*group, *entry2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_appendEntriesToGroup_ByIds()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries1;
+        entries1.append(entry1->id());
+        entries1.append(entry2->id());
+        QList<int> entries2;
+        entries2.append(entry3->id());
+        entries2.append(entry4->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntriesToGroup(9999, entries1));
+        QVERIFY(!service->appendEntriesToGroup(group->id(), wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        QVERIFY(service->appendEntriesToGroup(group->id(), entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->appendEntriesToGroup(group->id(), entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+        QCOMPARE(entries.at(2),entry3->id());
+        QCOMPARE(entries.at(3),entry4->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_appendEntriesToGroup_ByEntries()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry());
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList< QSharedPointer<CaEntry> > entries1;
+        entries1.append(entry1);
+        entries1.append(entry2);
+        QList< QSharedPointer<CaEntry> > entries2;
+        entries2.append(entry3);
+        entries2.append(entry4);
+        QList<QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->appendEntriesToGroup(groupEntry, entries1));
+        QVERIFY(!service->appendEntriesToGroup(*group, wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+        QVERIFY(service->appendEntriesToGroup(*group, entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->appendEntriesToGroup(*group, entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry1->id());
+        QCOMPARE(entries.at(1),entry2->id());
+        QCOMPARE(entries.at(2),entry3->id());
+        QCOMPARE(entries.at(3),entry4->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_prependEntryToGroup_ById()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntryToGroup(9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+        QVERIFY(!service->prependEntryToGroup(group->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->prependEntryToGroup(group->id(), entry2->id()));
+        entries = service->getEntryIds(query);
+
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_prependEntryToGroup_ByEntry()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntryToGroup(groupEntry, *entry1));
+        QVERIFY(!service->prependEntryToGroup(*group , itemEntry));
+        QVERIFY(service->prependEntryToGroup(*group , *entry1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->prependEntryToGroup(*group, *entry2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_prependEntriesToGroup_ByIds()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries1;
+        entries1.append(entry1->id());
+        entries1.append(entry2->id());
+        QList<int> entries2;
+        entries2.append(entry3->id());
+        entries2.append(entry4->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntriesToGroup(9999, entries1));
+        QVERIFY(!service->prependEntriesToGroup(group->id(), wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        QVERIFY(service->prependEntriesToGroup(group->id(), entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->prependEntriesToGroup(group->id(), entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+        QCOMPARE(entries.at(3),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_prependEntriesToGroup_ByEntries()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry());
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList< QSharedPointer<CaEntry> > entries1;
+        entries1.append(entry1);
+        entries1.append(entry2);
+        QList< QSharedPointer<CaEntry> > entries2;
+        entries2.append(entry3);
+        entries2.append(entry4);
+        QList< QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->prependEntriesToGroup(groupEntry, entries1));
+        QVERIFY(!service->prependEntriesToGroup(*group, wrongEntries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+        QVERIFY(service->prependEntriesToGroup(*group, entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(service->prependEntriesToGroup(*group, entries2));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),4);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+        QCOMPARE(entries.at(3),entry2->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_insertEntryIntoGroup_ById()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+
+        QVERIFY(!service->insertEntryIntoGroup(9999, entry2->id(), entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->insertEntryIntoGroup(group->id(), 9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->insertEntryIntoGroup(group->id(), entry2->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(service->insertEntryIntoGroup(group->id(), entry2->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_insertEntryIntoGroup_ByEntry()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(*group, *entry1));
+
+        QVERIFY(!service->insertEntryIntoGroup(groupEntry, *entry2, entry1->id()));
+        QVERIFY(!service->insertEntryIntoGroup(*group, itemEntry, entry1->id()));
+        QVERIFY(!service->insertEntryIntoGroup(*group, *entry2, 9999));
+
+        QVERIFY(service->insertEntryIntoGroup(*group, *entry2, entry1->id()));
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QCOMPARE(entries.at(0),entry2->id());
+        QCOMPARE(entries.at(1),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_insertEntriesIntoGroup_ByIds()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries2;
+        entries2.append(entry3->id());
+        entries2.append(entry4->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+
+        QVERIFY(!service->insertEntriesIntoGroup(9999, entries2, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(group->id(), wrongEntries1, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(group->id(), entries2, 9999));
+
+        QVERIFY(service->insertEntriesIntoGroup(group->id(), entries2, entry1->id()));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),3);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_insertEntriesIntoGroup_ByEntries()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry());
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry3 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry4 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList< QSharedPointer<CaEntry> > entries2;
+        entries2.append(entry3);
+        entries2.append(entry4);
+        QList< QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+
+        QVERIFY(!service->insertEntriesIntoGroup(groupEntry, entries2, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(*group, wrongEntries1, entry1->id()));
+        QVERIFY(!service->insertEntriesIntoGroup(*group, entries2, 9999));
+
+        QVERIFY(service->insertEntriesIntoGroup(*group, entries2, entry1->id()));
+
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),3);
+
+        QCOMPARE(entries.at(0),entry3->id());
+        QCOMPARE(entries.at(1),entry4->id());
+        QCOMPARE(entries.at(2),entry1->id());
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry3);
+        service->removeEntry(*entry4);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntryFromGroup_ById()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->removeEntryFromGroup(9999, entry1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(!service->removeEntryFromGroup(group->id(), 9999));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->removeEntryFromGroup(group->id(), entry1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntryFromGroup_ByEntry()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(!service->removeEntryFromGroup(groupEntry, *entry1));
+        QVERIFY(!service->removeEntryFromGroup(*group, itemEntry));
+
+        QVERIFY(service->prependEntryToGroup(group->id(), entry1->id()));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),1);
+        QVERIFY(service->removeEntryFromGroup(*group, *entry1));
+
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntriesFromGroup_ByIds()
+{
+    {
+        CaEntry itemEntry;
+        itemEntry.setText("item");
+        itemEntry.setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<int> entries1;
+        entries1.append(entry1->id());
+        entries1.append(entry2->id());
+        QList<int> wrongEntries1;
+        wrongEntries1.append(entry1->id());
+        wrongEntries1.append(9999);
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntriesToGroup(group->id(), entries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+        QVERIFY(!service->removeEntriesFromGroup(9999, entries1));
+        QVERIFY(!service->removeEntriesFromGroup(group->id(), wrongEntries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+
+        QVERIFY(service->removeEntriesFromGroup(group->id(), entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntriesFromGroup_ByEntries()
+{
+    {
+        QSharedPointer<CaEntry> itemEntry (new CaEntry);
+        itemEntry->setText("item");
+        itemEntry->setEntryTypeName("typeok");
+        CaEntry groupEntry(GroupEntryRole);
+        groupEntry.setText("group");
+        groupEntry.setEntryTypeName("typeok");
+        QSharedPointer<CaService> service = CaService::instance();
+
+        QSharedPointer<CaEntry> entry1 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> entry2 = service->createEntry(*itemEntry);
+        QSharedPointer<CaEntry> group = service->createEntry(groupEntry);
+
+        QList<QSharedPointer<CaEntry> > entries1;
+        entries1.append(entry1);
+        entries1.append(entry2);
+        QList<QSharedPointer<CaEntry> > wrongEntries1;
+        wrongEntries1.append(entry1);
+        wrongEntries1.append(itemEntry);  //this item has unspecified id
+
+        CaQuery query;
+        query.setParentId(group->id());
+        query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+        QVERIFY(service->prependEntriesToGroup(*group, entries1));
+        QList<int> entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+
+        QVERIFY(!service->removeEntriesFromGroup(groupEntry, entries1));
+        QVERIFY(!service->removeEntriesFromGroup(*group, wrongEntries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),2);
+
+        QVERIFY(service->removeEntriesFromGroup(*group, entries1));
+        entries = service->getEntryIds(query);
+        QCOMPARE(entries.count(),0);
+
+        //Cleanup
+        service->removeEntry(*entry1);
+        service->removeEntry(*entry2);
+        service->removeEntry(*group);
+
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_customSort()
+{
+    CaQuery collectionQuery;
+    collectionQuery.addEntryTypeName("collection");
+    QSharedPointer<CaService> service = CaService::instance();
+    QList<int> collectionIds = service->getEntryIds(collectionQuery);
+    QVERIFY(collectionIds.count());
+    
+    const int groupId = collectionIds.at(0);
+
+    CaQuery query;
+    query.setParentId(groupId);
+    query.setSort(DefaultSortAttribute, Qt::AscendingOrder);
+
+    QList<int> idsBefore = service->getEntryIds(query);
+    QVERIFY(idsBefore.count());
+
+    int first = idsBefore.takeFirst();
+    idsBefore.append(first);
+
+    // sort entries is group in custom order
+    QVERIFY(service->customSort(groupId, idsBefore));
+
+    // check results
+    QList<int> idsAfter = service->getEntryIds(query);
+    QVERIFY(idsAfter.count());
+
+    QCOMPARE(idsAfter.count(),idsBefore.count());
+    QCOMPARE(idsAfter, idsBefore);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclient_remove.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,156 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "caquery.h"
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntry_ById()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item);
+        QVERIFY(!resultItem1.isNull());
+        QVERIFY(!service->removeEntry(9999));
+        QVERIFY(service->removeEntry(resultItem1->id()));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem1->id());
+        QVERIFY(storageItem1.isNull());  // entry not present in the storage
+        QVERIFY(!service->removeEntry(resultItem1->id()));
+        QVERIFY(service->lastError() != NoErrorCode);
+
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item);
+        QVERIFY(!resultItem2.isNull());
+
+        QVERIFY(service->removeEntry(*resultItem2));
+        QSharedPointer<CaEntry> storageItem2 = service->getEntry(resultItem2->id());
+        QVERIFY(storageItem2.isNull());  // entry not present in the storage
+        QVERIFY(!service->removeEntry(*resultItem2));
+
+        //cleanup
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntry_ByEntry()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item);
+        QVERIFY(!resultItem1.isNull());
+
+        QVERIFY(service->removeEntry(*resultItem1));
+        QCOMPARE(service->lastError() , NoErrorCode);
+
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem1->id());
+        QVERIFY(storageItem1.isNull());  // entry not present in the storage
+        
+        //cleanup
+        service->removeEntry(*resultItem1);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_removeEntries_ByIds()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem1 = service->createEntry(item);
+        QSharedPointer<CaEntry> resultItem2 = service->createEntry(item);
+        QVERIFY(!resultItem1.isNull());
+        QVERIFY(!resultItem2.isNull());
+
+        QList<int> ids;
+        ids.append(resultItem1->id());
+        ids.append(resultItem2->id());
+        QVERIFY(service->removeEntries(ids));
+        QSharedPointer<CaEntry> storageItem1 = service->getEntry(resultItem1->id());
+        QSharedPointer<CaEntry> storageItem2 = service->getEntry(resultItem2->id());
+        QVERIFY(storageItem1.isNull());  // entry not present in the storage
+        QVERIFY(storageItem2.isNull());  // entry not present in the storage
+
+        //cleanup
+        service->removeEntry(*resultItem1);
+        service->removeEntry(*resultItem2);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::Test_RemoveEntries_ByEntries()
+{
+    {
+        CaEntry item;
+        item.setText("testName");
+        item.setAttribute("attrName1", "attrVal1");
+        item.setEntryTypeName("test");
+        item.setFlags(RemovableEntryFlag);
+
+        QSharedPointer<CaService> service = CaService::instance();
+        QSharedPointer<CaEntry> resultItem3 = service->createEntry(item);
+        QSharedPointer<CaEntry> resultItem4 = service->createEntry(item);
+        QVERIFY(!resultItem3.isNull());
+        QVERIFY(!resultItem4.isNull());
+
+        QList<QSharedPointer<CaEntry> > entries;
+        entries.append(resultItem3);
+        entries.append(resultItem4);
+
+        QVERIFY(service->removeEntries(entries));
+        QSharedPointer<CaEntry> storageItem3 = service->getEntry(resultItem3->id());
+        QSharedPointer<CaEntry> storageItem4 = service->getEntry(resultItem4->id());
+        QVERIFY(storageItem3.isNull());  // entry not present in the storage
+        QVERIFY(storageItem4.isNull());  // entry not present in the storage
+
+        //cleanup
+        service->removeEntry(*resultItem3);
+        service->removeEntry(*resultItem4);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/src/t_caclientnotifier.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,182 @@
+/*
+* 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:  Main test class for hspluginmodel library.
+*
+*/
+
+#include "t_caclientnotifier.h"
+#include "caentry.h"
+#include "canotifier.h"
+#include "canotifierfilter.h"
+#include "caservice.h"
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TestCaClientNotifier::TestCaClientNotifier():
+    mEntryId(0),
+    mGroupId(0),
+    mChangeType(AddChangeType),
+    mEntry(NULL),
+    mCount(0),
+    mEntryIds(new QList<int>()),
+    mGroupIds(new QList<int>()),
+    mChangeTypes(new QList<ChangeType>()),
+    mEntries(new QList<const CaEntry *>()),
+    mFilter(NULL),
+    mNotifier(NULL)
+{
+
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TestCaClientNotifier::TestCaClientNotifier(const CaService &service, CaNotifierFilter *filter):
+    mEntryId(0),
+    mGroupId(0),
+    mChangeType(AddChangeType),
+    mEntry(NULL),
+    mCount(0),
+    mEntryIds(new QList<int>()),
+    mGroupIds(new QList<int>()),
+    mChangeTypes(new QList<ChangeType>()),
+    mEntries(new QList<const CaEntry *>())
+{
+    if (!filter) {
+        mFilter = new CaNotifierFilter();
+        mNotifier = service.createNotifier(*mFilter);
+    } else {
+        mFilter = NULL;
+        mNotifier = service.createNotifier(*filter);
+    }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClientNotifier::clean()
+{
+    mEntryId = 0;
+    mGroupId = 0;
+    mChangeType = AddChangeType;
+    mCount = 0;
+    delete mEntryIds;
+    mEntryIds = new QList<int>();
+    delete mGroupIds;
+    mGroupIds = new QList<int>();
+    delete mChangeTypes;
+    mChangeTypes = new QList<ChangeType>();
+    delete mEntries;
+    mEntries = new QList<const CaEntry *>();
+    delete mEntry;
+    mEntry = NULL;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TestCaClientNotifier::~TestCaClientNotifier()
+{
+    delete mEntry;
+    delete mFilter;
+    delete mNotifier;
+    delete mEntryIds;
+    delete mGroupIds;
+    delete mChangeTypes;
+    delete mEntries;
+
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CaNotifier *TestCaClientNotifier::getNotifier() const
+{
+    return mNotifier;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CaNotifierFilter *TestCaClientNotifier::getFilter() const
+{
+    return mFilter;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClientNotifier::entryChanged(int entryId, ChangeType changeType)
+{
+    mEntryId = entryId;
+    mChangeType = changeType;
+    mEntryIds->append(entryId);
+    mChangeTypes->append(changeType);
+    mEntries->append(NULL);
+    mGroupIds->append(0);
+    mCount++;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClientNotifier::entryChanged(const CaEntry &entry, ChangeType changeType)
+{
+    delete mEntry;
+    mEntry = new CaEntry(entry);
+    mEntryId = entry.id();
+    mChangeType = changeType;
+    mEntryIds->append(entry.id());
+    mChangeTypes->append(changeType);
+    mEntries->append(&entry);
+    mGroupIds->append(0);
+    mCount++;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClientNotifier::entryTouched(int id)
+{
+    mEntryId = id;
+    mEntryIds->append(id);
+    mChangeTypes->append(AddChangeType);
+    mEntries->append(NULL);
+    mGroupIds->append(0);
+    mCount++;
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClientNotifier::groupContentChanged(int groupId)
+{
+    mGroupId = groupId;
+    mEntryIds->append(0);
+    mChangeTypes->append(AddChangeType);
+    mEntries->append(NULL);
+    mGroupIds->append(groupId);
+    mCount++;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api.pri	Wed Oct 06 16:00:22 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:
+#
+
+HEADERS += ./inc/*.h
+SOURCES += ./src/*.cpp
+symbian:
+{
+    HEADERS += ../../../../contentstorage/tsrc/testutils/inc/*.h
+    SOURCES += ../../../../contentstorage/tsrc/testutils/src/*.cpp
+    SOURCES += ../../../../contentstorage/srvsrc/castorageproxy.cpp
+    SOURCES += ../../../../contentstorage/srvsrc/cabackupnotifier.cpp
+    SOURCES += ../../../../contentstorage/castorage/src/*.cpp
+    
+    
+    BLD_INF_RULES.prj_testexports += "data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caclient/installs/sapiapp_S60_3_X_v_1_0_0.sisx"
+    BLD_INF_RULES.prj_exports += "data/winscw/sapiapp_S60_3_X_v_1_0_0.sisx c:/testing/data/t_caclient/installs/sapiapp_S60_3_X_v_1_0_0.sisx"
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,99 @@
+#
+# 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
+CONFIG += hb mobility
+MOBILITY = serviceframework
+HB = hbcore
+include(../../../../common.pri)
+include(../../../../contentstorage/tsrc/testutils/testutils.pri)
+CONFIG(debug, debug|release) {
+    DESTDIR = debug
+} else {
+    DESTDIR = release
+}
+
+CONFIG += debug_and_release \
+    console
+QT += testlib xml
+
+DEFINES += CONTENTARSENAL_UNITTEST
+DEFINES += CONTENT_ARSENAL_STORAGE_UT
+
+coverage:DEFINES += COVERAGE_MEASUREMENT
+DEPENDPATH += . \
+    ./inc \
+    ./src
+INCLUDEPATH += . \
+    ./inc \
+    ../../../../contentstorage/caclient/inc \
+    ../../../../contentstorage_api \
+    ../../../../contentstorage/srvinc \
+    ../../../../contentstorage/inc \
+    ../../../../contentstorage/cautils/inc \
+    ../../../../contentstorage/castorage/inc \
+    ../../../../contentstorage/inc
+
+LIBS += -lcaclient
+   
+symbian: {
+    CONFIG += symbian_test
+    ### get rid of localization warnings
+    CONFIG -= hb
+    load(hb.prf)
+    CONFIG -= symbian_i18n
+    ###
+
+    TARGET.UID2 = 0x100039CE
+    TARGET.UID3 = 0x2002DCFA
+    TARGET.CAPABILITY = ALL -TCB
+    TARGET.EPOCSTACKSIZE = 0x14000 // 80kB
+    TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB
+
+    INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+
+    LIBS += \
+        -lapgrfx \
+        -lefsrv \
+        -lws32 \
+        -lcautils \
+        -lsqldb \
+        -lbafl  \
+        -lflogger \
+        -lsysutil
+        
+    export.sources = ./data/armv5/*.sisx
+    export.path = /testing/data/t_caclient/installs
+    
+    exportDB.sources = ./data/castorage.db
+    exportDB.path = /testing/data/t_caclient/
+    
+    exportQM.sources = ./data/emailTest.qm
+    exportQM.path = /resource/qt/translations/
+    
+    
+    DEPLOYMENT += export \
+                exportDB \ 
+                exportQM
+    
+}
+
+include(t_contentstorage_api.pri)
+!win32:include(t_contentstorage_api_installs_win32.pri)
+!symbian:unix:include(t_contentstorage_api_installs_unix.pri)
+
+
+symbian:MMP_RULES += SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api_installs_unix.pri	Wed Oct 06 16:00:22 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:
+#
+#
+
+# Release - deploy only release version of the tests
+
+#
+
+
+
+r01.path =  ../../../../bin/hstests
+
+r01.files = ./release/t_hsmcsserviceprovider \
+
+
+
+INSTALLS += r01
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/t_contentstorage_api/t_contentstorage_api_installs_win32.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,24 @@
+#
+# 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:
+#
+
+testfiles.path = ../../../../../bin/debug/
+
+testfiles.files = ./release/t_caclient.exe \
+
+testfiles.files = ./debug/t_caclient.exe
+
+INSTALLS += testfiles 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/contentstorage_api/tsrc/tsrc.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,21 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS = t_contentstorage_api
+
+CONFIG  += ordered
--- a/homescreensrv_plat/hswidgetmodel_api/hswidgetmodel_api.metaxml	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<api id="25e0f9e1a5ff8ab2eac3620ab2a5e575" dataversion="2.0">
-  <name>hswidgetmodel_api</name>
-  <description>Home screen widget model api</description>
-  <type>c++</type>
-  <libs/>
-  <release category="platform" sinceversion=""/>
-  <attributes>
-    <htmldocprovided>no</htmldocprovided>
-    <adaptation>no</adaptation>
-  </attributes>
-</api>
--- a/homescreensrv_plat/taskswitcher_api/taskswitcher_api.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/homescreensrv_plat/taskswitcher_api/taskswitcher_api.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -19,7 +19,7 @@
                     taskswitcher_api/tspropertydefs.h \
 
 symbian {
-    crml.sources = taskswitcher_api/tsdevicedialog.qcrml
+    crml.sources = tsdevicedialog.qcrml
     crml.path = /resource/qt/crml
     DEPLOYMENT += crml
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/inc/t_tstasksettings.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef T_TSTASKSETTINGS_H
+#define T_TSTASKSETTINGS_H
+
+#include <QObject>
+#include <QSharedPointer>
+#include <QPixmap>
+
+#include "tstaskmonitor.h"
+#include "tstasksettings.h"
+
+/**
+* @test Test class for TsTaskSettings
+*/
+class T_TsTaskSettings : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void initTestCase();
+    void testRegisteringScreenshotTriggersTaskListChangeSignal();
+    void testUnregisteringScreenshotTriggersTaskListChangeSignal();
+    void testIconIsReturnedAfterUnregisteringScreenshot();
+    void testRegisteringEmptyPixmapReturnsFalse();
+    void testRegisteringTheSameScreenshotTwiceTriggersTaskListChangeSignal();
+    void testRegisteringOverwritesOldScreenshot();
+    void testRegisteringFailsIfHigherPriorityScreenshotIsRegistered();
+    
+    void testChangingVisibilityOfApplication();
+    
+private:
+    QSharedPointer<TsTask> unitTestTask();
+    QPixmap imageWithCircle();
+    bool registerHighPriorityScreenshot(const QPixmap &screenshot);
+    
+private:
+    TsTaskSettings mTaskSettings;    
+    TsTaskMonitor mTaskMonitor;   
+    
+};
+
+#endif //T_TSTASKSETTINGS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/src/t_tstasksettings.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,225 @@
+/*
+* 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 "t_tstasksettings.h"
+
+#include <s32mem.h>
+
+#include <QtTest/QtTest>
+#include <QDesktopWidget>
+#include <QPainter>
+
+#include <QDebug>
+#include <XQConversions>
+
+#if defined (Q_OS_SYMBIAN)
+#include <coecntrl.h>
+#include "tstaskmonitorclient.h"
+#include "tsscreenshotclient.h"
+#include "tsutils.h"
+using TaskSwitcher::CleanupResetAndDestroyPushL;
+#endif
+
+#include "tstask.h"
+#include "tstaskchangeinfo.h"
+#include "tstestutils.h"
+
+void T_TsTaskSettings::initTestCase()
+{
+    while (!unitTestTask().data())
+        QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testRegisteringScreenshotTriggersTaskListChangeSignal()
+{    
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testUnregisteringScreenshotTriggersTaskListChangeSignal()
+{    
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QVERIFY(mTaskSettings.unregisterScreenshot());
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testIconIsReturnedAfterUnregisteringScreenshot()
+{    
+    // get icon
+    QSharedPointer<TsTask> taskBefore = unitTestTask();
+    QVERIFY(taskBefore.data());
+    QPixmap icon = taskBefore->screenshot();
+    QVERIFY(!icon.isNull());
+    
+    // register and unregister screenshot
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));    
+    QVERIFY(mTaskSettings.unregisterScreenshot());
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    // compare pixmap returned after register/unregister with icon
+    QSharedPointer<TsTask> taskAfter = unitTestTask();
+    QVERIFY(taskAfter.data());
+    QVERIFY(taskAfter->screenshot().toImage() == icon.toImage());
+}
+
+void T_TsTaskSettings::testRegisteringEmptyPixmapReturnsFalse()
+{
+    QVERIFY(!mTaskSettings.registerScreenshot(QPixmap()));
+}
+
+void T_TsTaskSettings::testRegisteringTheSameScreenshotTwiceTriggersTaskListChangeSignal()
+{    
+    QPixmap image = imageWithCircle();
+    
+    QVERIFY(mTaskSettings.registerScreenshot(image));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));    
+    QVERIFY(mTaskSettings.registerScreenshot(image));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));    
+}
+
+void T_TsTaskSettings::testRegisteringOverwritesOldScreenshot()
+{
+    QPixmap previousScreenshot;
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());    
+        previousScreenshot = myTask->screenshot();
+    }
+        
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QPixmap screenshotAfterFirstRegistration;
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+        screenshotAfterFirstRegistration = myTask->screenshot();
+    }
+    
+    QVERIFY(previousScreenshot.toImage() != screenshotAfterFirstRegistration.toImage());
+    
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QPixmap screenshotAfterSecondRegistration;
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+        screenshotAfterSecondRegistration = myTask->screenshot();
+    }
+    
+    QVERIFY(screenshotAfterSecondRegistration.toImage() != screenshotAfterFirstRegistration.toImage());
+}
+
+void T_TsTaskSettings::testRegisteringFailsIfHigherPriorityScreenshotIsRegistered()
+{
+    QPixmap highPriorityScreenshot = imageWithCircle();
+    registerHighPriorityScreenshot(highPriorityScreenshot);
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QVERIFY(!mTaskSettings.registerScreenshot(imageWithCircle()));
+    
+    // clean up and verify the screenshots can be registered
+    QVERIFY(mTaskSettings.unregisterScreenshot());
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testChangingVisibilityOfApplication()
+{
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+    }
+    
+    // hide unit test task
+    mTaskSettings.setVisibility(false);
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(!myTask.data());
+    }
+
+    // show unit test task
+    mTaskSettings.setVisibility(true);
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+    }    
+}
+
+QSharedPointer<TsTask> T_TsTaskSettings::unitTestTask()
+{
+    // find unit test task
+    QSharedPointer<TsTask> myTask;
+    foreach(TsTaskChange taskChange, mTaskMonitor.changeList(true)) {
+        if (!taskChange.second.isNull()) {
+            if (taskChange.second->name() == "t_tstasksettings") {
+                myTask = taskChange.second;
+                break;
+            }
+        }
+    }
+    return myTask;
+}
+
+bool T_TsTaskSettings::registerHighPriorityScreenshot(const QPixmap &screenshot)
+{
+#if defined (Q_OS_SYMBIAN)
+    int wgId = QApplication::desktop()->winId()->ControlEnv()->RootWin().WindowGroupId();
+    
+    QScopedPointer<CFbsBitmap> bitmap(screenshot.toSymbianCFbsBitmap());
+    if (bitmap.isNull()) 
+        return false;
+        
+    int error(KErrGeneral);
+    
+    QT_TRAP_THROWING (    
+        CTsScreenshotClient* screenshotClient = CTsScreenshotClient::NewLC();            
+        error = screenshotClient->RegisterScreenshot(bitmap.data(), wgId, High);
+        CleanupStack::PopAndDestroy(screenshotClient);
+    );
+    
+    return error == KErrNone;
+#else
+    return false;
+#endif
+}
+
+QPixmap T_TsTaskSettings::imageWithCircle()
+{
+    static int hue = 0;
+    QPixmap screenshot(10, 10);
+    
+    {
+        QPainter painter(&screenshot);
+        painter.setBrush(Qt::black);
+        painter.drawRect(screenshot.rect());
+        painter.setBrush(QColor::fromHsv(hue, 255, 255));
+        painter.drawEllipse(screenshot.rect());
+    }
+
+    hue += 17;
+    return screenshot;
+}
+
+QTEST_MAIN(T_TsTaskSettings)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/t_tstasksettings.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,55 @@
+#
+# 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
+
+QT *= testlib
+CONFIG += console   
+      
+INCLUDEPATH +=  . \
+      
+HEADERS += inc/t_tstasksettings.h \
+
+SOURCES += src/t_tstasksettings.cpp \
+
+DEFINES += TSTASKMONITOR_TEST
+
+symbian {
+    CONFIG += symbian_test
+    coverage: CONFIG -= symbian_test
+    TARGET.EPOCSTACKSIZE = 0x14000 // 80kB
+    TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB
+    
+    TARGET.CAPABILITY = ALL -TCB
+    TARGET.EPOCALLOWDLLDATA=1   
+    
+    LIBS += -lcone \
+            -lapgrfx \      # for RApaLsSession
+            -lws32 \        # for RWsSession
+            
+}
+
+INCLUDEPATH += ../../../../internal/tstestutils/inc
+LIBS += -ltstestutils.lib
+
+coverage {
+    DEFINES += COVERAGE_MEASUREMENT
+    DEFINES += QT_NO_DEBUG  # omit ASSERTS in coverage measurements
+}
+
+include(../../../../taskswitcher/client/client.pri)
+
+symbian:MMP_RULES += SMPSAFE
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/taskswitcher_api/tsrc/tsrc.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,21 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS = t_tstasksettings
+           
+CONFIG  += ordered
--- a/hsappkeyhandler/group/hsappkeyplugin.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/hsappkeyhandler/group/hsappkeyplugin.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -49,3 +49,6 @@
 LIBRARY afactivitylauncher.lib
 DEBUGLIBRARY flogger.lib
 // End of file
+
+
+SMPSAFE
--- a/package_definition.xml	Mon Sep 27 11:31:59 2010 +0300
+++ b/package_definition.xml	Wed Oct 06 16:00:22 2010 +0300
@@ -76,15 +76,13 @@
      <component id="ts_activitytsplugin" name="Task Switcher Activity Plugin" introduced="^4" filter="s60" class="plugin">
       <unit bldFile="taskswitcher/activitytsplugin" qt:proFile="activitytsplugin.pro"/>
      </component>
+     <component id="ts_devicedialogplugin" name="Task Switcher Device Dialog Plugin" introduced="^4" filter="s60" class="plugin">
+      <unit bldFile="taskswitcher/tsdevicedialogplugin" qt:proFile="tsdevicedialogplugin.pro"/>
+     </component>
      <component id="taskswitcher_rom" name="Task Switcher ROM" introduced="^4" filter="s60" class="config">
       <unit bldFile="taskswitcher/rom"/>
      </component>
-    </collection>
-   <collection id="tsdevicedialog" name="Task Switcher Device Dialog" level="plugin">
-     <component id="tsdevicedialog_build" name="Task Switcher Device Dialog Build" introduced="^4" filter="s60">
-      <unit bldFile="tsdevicedialog" qt:proFile="tsdevicedialog.pro"/>
-     </component>
-  </collection>
+   </collection>
     <collection id="homescreensrv_info" name="Home Screen Services Info" level="specific">
      <component id="homescreensrv_rom" name="Home Screen Services ROM" class="config" introduced="^4" filter="s60">
       <unit bldFile="rom"/>
--- a/taskswitcher/activitytsplugin/activitytsplugin.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/activitytsplugin/activitytsplugin.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -27,6 +27,7 @@
 
 INCLUDEPATH +=  inc \
                 ../../../inc \
+                ../utils/inc
 
 HEADERS +=  inc/activitytsplugin.h \
             inc/activitytsmodel.h \
@@ -35,6 +36,7 @@
 SOURCES +=  src/activitytsplugin.cpp \
             src/activitytsmodel.cpp \
             src/activitytsentry.cpp \
+            
 
 symbian {
     load(data_caging_paths)
@@ -56,4 +58,6 @@
 
     #temporary workaround
     BLD_INF_RULES.prj_exports += "data/activitytsplugin.xml z:/resource/taskswitcher/activitytsplugin.xml"
+    
+    MMP_RULES += SMPSAFE
 }
--- a/taskswitcher/activitytsplugin/inc/activitytsmodel.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/activitytsplugin/inc/activitytsmodel.h	Wed Oct 06 16:00:22 2010 +0300
@@ -22,8 +22,12 @@
 #include <QVariantHash>
 
 #include "activitytsentry.h"
+#include "tswindowgroupsobserver.h"
 
-class ActivityTsModel : public QObject
+class MTsWindowGroupsMonitor;
+
+class ActivityTsModel : public QObject,
+                        public MTsWindowGroupsObserver
 {
     Q_OBJECT
 
@@ -31,6 +35,14 @@
     ActivityTsModel(QObject *parent = 0);
     virtual ~ActivityTsModel();
 
+public: //from MTsWindowGroupsObserver
+    void HandleWindowGroupChanged(MTsResourceManager& resources, 
+                                  const MTsRunningApplicationStorage& storage);
+
+private:
+    bool filterActivity();
+    ActivityTsEntry *findEntryWithScreenshot(const QList<ActivityTsEntry*> &entryList, const QVariantHash &activityEntry);
+    
 public slots:
     QList<QVariantHash> taskList() const;
     QList<QVariantHash> taskList(int limit) const;
@@ -42,21 +54,24 @@
     void dataChanged();
     
 private slots:
-    void getActivities();    
+    void getActivities();
     
-public slots:    
+public slots:
     void convertScreenshotToThumbnail(const QPixmap &thumbnail, void *userData);
     void thumbnailCreated(const QPixmap &thumbnail, const void *userData);
-    
+    void setResources(MTsResourceManager& resources);
+
 signals:
     void createThumbnail(const QPixmap &source, int angle, const void *userData);
     
 private:
+    MTsWindowGroupsMonitor* mMonitor;
     QObject *mAfManager;
     int mMaxItems;
+    QList<ActivityTsEntry*> mData;
+    QList<ActivityTsEntry*> mPublishedData;
     
-    QList<ActivityTsEntry*> mData;
-    
+    QList<int> mRunningAppsUid;
 };
 
 #endif // ACTIVITYTSMODEL_H
--- a/taskswitcher/activitytsplugin/src/activitytsentry.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/activitytsplugin/src/activitytsentry.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -46,6 +46,9 @@
 
     mData.insert("TaskName", activityData.value(ActivityApplicationName));
     mData.insert("TaskScreenshot", -1);
+    
+    mData.insert(ActivityApplicationKeyword, activityData.value(ActivityApplicationKeyword));
+    mData.insert(ActivityActivityKeyword, activityData.value(ActivityActivityKeyword));
 }
 
 ActivityTsEntry::~ActivityTsEntry()
--- a/taskswitcher/activitytsplugin/src/activitytsmodel.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/activitytsplugin/src/activitytsmodel.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -26,6 +26,10 @@
 #include <XQSettingsManager>
 
 #include "afstorageglobals.h"
+#include "tsrunningapp.h"
+#include "tsrunningappstorage.h"
+#include "tswindowgroupsmonitor.h"
+#include "tsresourcemanager.h"
 
 QTM_USE_NAMESPACE
 
@@ -36,7 +40,11 @@
     const int KItemsLimit = 0x00000001;
 }
 
-ActivityTsModel::ActivityTsModel(QObject *parent) : QObject(parent), mAfManager(0) , mMaxItems(10)
+ActivityTsModel::ActivityTsModel(QObject *parent) : 
+QObject(parent),
+mMonitor(0),
+mAfManager(0) , 
+mMaxItems(10)
 {
     {
         QServiceManager serviceManager;
@@ -67,23 +75,53 @@
 
 ActivityTsModel::~ActivityTsModel()
 {
+    if (mMonitor) {
+       mMonitor->Cancel(*this); 
+    }
     qDeleteAll(mData);
 }
 
+void ActivityTsModel::HandleWindowGroupChanged(
+                                  MTsResourceManager& resources, 
+                                  const MTsRunningApplicationStorage& storage)
+{
+    Q_UNUSED(resources);
+    mRunningAppsUid.clear();
+    for (int i(0); i < storage.Count(); ++i) {
+        mRunningAppsUid.append(storage[i].UidL().iUid);
+    }
+    if(filterActivity()) {
+        emit dataChanged();
+    }
+}
+
+bool ActivityTsModel::filterActivity()
+{
+    bool retVal(false);
+    mPublishedData.clear();
+    for (int i(0); i < mData.count(); ++i) {
+        if(!mRunningAppsUid.contains(mData[i]->data().value(ActivityApplicationKeyword).toInt())) {
+            mPublishedData.append(mData[i]);
+            retVal = true;
+        }
+    }
+    return retVal;
+}
+
 QList<QVariantHash> ActivityTsModel::taskList() const
 {
-    return taskList(mData.count());
+    return taskList(mPublishedData.count());
 }
 
 QList<QVariantHash> ActivityTsModel::taskList(int limit) const
 {
     QList<QVariantHash> result;
-    for (int i(0); i < limit && i < mData.count(); ++i) {
-        result.append(mData[i]->data());
+    for (int i(0); i < limit && i < mPublishedData.count(); ++i) {
+        result.append(mPublishedData[i]->data());
     }
     return result;
 }
-    
+
 bool ActivityTsModel::openTask(const QVariant &id)
 {
     foreach (const ActivityTsEntry *entry, mData) {
@@ -105,8 +143,8 @@
 }
 
 void ActivityTsModel::getActivities()
-{
-    qDeleteAll(mData);
+{   
+    QList<ActivityTsEntry*> oldData(mData);
     mData.clear();
     
     QList<QVariantHash> activities;
@@ -114,27 +152,49 @@
                               "activitiesList",
                               Q_RETURN_ARG(QList<QVariantHash>, activities),
                               Q_ARG(int, mMaxItems));
-                              
+
     foreach (const QVariantHash &activityEntry, activities) {
-        mData.append(new ActivityTsEntry(activityEntry));
+        ActivityTsEntry *reusableEntry = findEntryWithScreenshot(oldData, activityEntry);
+        if (reusableEntry) {
+            mData.append(reusableEntry);
+            oldData.removeAll(reusableEntry);
+        } else {
+            mData.append(new ActivityTsEntry(activityEntry));
         
-        QMetaObject::invokeMethod(
+            QMetaObject::invokeMethod(
                 mAfManager,
                 "getThumbnail",
                 Q_ARG(QString, activityEntry.value(ActivityScreenshotKeyword).toString()),
                 Q_ARG(void *, mData.last()));
+        }
     }
+    qDeleteAll(oldData);
     
+    filterActivity();
     emit dataChanged();
 }
 
+ActivityTsEntry *ActivityTsModel::findEntryWithScreenshot(const QList<ActivityTsEntry*> &entryList, const QVariantHash &activityEntry) 
+{
+    foreach (ActivityTsEntry *entry, entryList) {
+        const QVariantHash data = entry->data();
+        if ((data.value(ActivityApplicationKeyword) == activityEntry.value(ActivityApplicationKeyword)) &&
+            (data.value(ActivityActivityKeyword) == activityEntry.value(ActivityActivityKeyword)) &&
+            (data.value("TaskTimestamp") == activityEntry.value(ActivityTimestamp)) &&
+            (data.value("TaskScreenshot") != -1)) {
+            return entry;
+        }
+    }
+    return 0;
+}
+
 void ActivityTsModel::convertScreenshotToThumbnail(const QPixmap &thumbnail, void *userData)
 {
     emit createThumbnail(thumbnail, 0, userData);
 }
 
 void ActivityTsModel::thumbnailCreated(const QPixmap &thumbnail, const void *userData)
-{    
+{
     foreach (ActivityTsEntry *activity, mData) {
         if (activity == userData) {
             activity->setThumbnail(thumbnail.toSymbianCFbsBitmap());
@@ -143,3 +203,12 @@
         }
     }
 }
+
+void ActivityTsModel::setResources(MTsResourceManager& resources)
+{
+    if (mMonitor) {
+        mMonitor->Cancel(*this);
+    }
+    mMonitor = &resources.WsMonitor();
+    mMonitor->SubscribeL(*this);
+}
--- a/taskswitcher/backstepping/eabi/tsbacksteppingu.def	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/backstepping/eabi/tsbacksteppingu.def	Wed Oct 06 16:00:22 2010 +0300
@@ -5,4 +5,6 @@
 	_ZN25CTsBacksteppingActivationD2Ev @ 4 NONAME
 	_ZTI25CTsBacksteppingActivation @ 5 NONAME
 	_ZTV25CTsBacksteppingActivation @ 6 NONAME
+	_ZTI27CTsWindowGroupsObserverBase @ 7 NONAME
+	_ZTV27CTsWindowGroupsObserverBase @ 8 NONAME
 
--- a/taskswitcher/backstepping/group/tsbackstepping.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/backstepping/group/tsbackstepping.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -35,14 +35,15 @@
 SOURCE         tsbacksteppingactivation.cpp
 
 SOURCEPATH     ../../utils/src
-SOURCE        tswindowgroupsobserver.cpp
-SOURCE        tsresourcemanager.cpp
+SOURCE        tswindowgroupsobserverbase.cpp
 SOURCE        tsidlist.cpp
 
 LIBRARY        euser.lib 
 LIBRARY        ws32.lib // for RWsSession
-LIBRARY        apgrfx.lib // for TApaTask / TApaTasksList
 LIBRARY        afactivitylauncher.lib
 LIBRARY        estor.lib
 
 DEBUGLIBRARY    flogger.lib
+
+
+SMPSAFE
--- a/taskswitcher/backstepping/inc/tsbackstepping.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/backstepping/inc/tsbackstepping.h	Wed Oct 06 16:00:22 2010 +0300
@@ -19,11 +19,11 @@
 #define __CBACKSTEPPING_H
 
 #include <w32std.h>
-#include <tswindowgroupsobserver.h>
+#include "tswindowgroupsobserverbase.h"
 
 class CTsBacksteppingFilter;
 
-NONSHARABLE_CLASS(CTsBackstepping) : public CTsWindowGroupsObserver
+NONSHARABLE_CLASS(CTsBackstepping) : public CTsWindowGroupsObserverBase
 {
 public:
     static CTsBackstepping* NewL( MTsWindowGroupsMonitor& );
--- a/taskswitcher/backstepping/src/tsbackstepping.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/backstepping/src/tsbackstepping.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -28,7 +28,9 @@
 #include <afactivitylauncher.h>
 
 #include "tsbacksteppingfilter.h"
-
+#include "tsrunningapp.h"
+#include "tsrunningappstorage.h"
+#include "tsresourcemanager.h"
 /**
  * String to switch hsapplication to IDLE state using activity framework
  */
@@ -69,7 +71,7 @@
  */
 CTsBackstepping::CTsBackstepping( MTsWindowGroupsMonitor &aMonitor )
 :
-CTsWindowGroupsObserver( aMonitor ), iHsWasFirst(ETrue)
+CTsWindowGroupsObserverBase( aMonitor ), iHsWasFirst(ETrue)
     {
     }
 
--- a/taskswitcher/backstepping/src/tsbacksteppingactivation.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/backstepping/src/tsbacksteppingactivation.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -22,7 +22,7 @@
 #include "tsbacksteppingactivation.h"
 #include "tsbackstepping.h"
 
- // ============================ MEMBER FUNCTIONS ===============================
+ 
 // -----------------------------------------------------------------------------
 // CBacksteppingActivation::NewL
 // Two-phased constructor.
--- a/taskswitcher/client/client.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/client/client.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -38,3 +38,6 @@
 }
 
 include(client.pri)
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/taskswitcher/inc/tstaskmonitorglobals.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/inc/tstaskmonitorglobals.h	Wed Oct 06 16:00:22 2010 +0300
@@ -37,7 +37,7 @@
     OpenTaskMessage,
     CloseTaskMessage,
     WindowGroupToBackgroundMessage,
-    IgnoreWindowGroups
+    AllowedWindowGroups
 };
 
 enum UpdatePriority {
--- a/taskswitcher/rom.pri	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/rom.pri	Wed Oct 06 16:00:22 2010 +0300
@@ -15,6 +15,8 @@
 #
 
 BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"
-BLD_INF_RULES.prj_exports += "rom/tstaskmonitor_core.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(tstaskmonitor_core.iby)"
+BLD_INF_RULES.prj_exports += "rom/tstaskmonitor_core.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(tstaskmonitor_core.iby)"
 BLD_INF_RULES.prj_exports += "./sis/stubs/taskmonitor_stub.sis  /epoc32/release/winscw/udeb/z/system/install/taskmonitor_stub.sis"
 BLD_INF_RULES.prj_exports += "./sis/stubs/taskmonitor_stub.sis  /epoc32/data/z/system/install/taskmonitor_stub.sis"
+BLD_INF_RULES.prj_exports += "rom/tsdevicedialog_core.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(tsdevicedialog_core.iby)"
+BLD_INF_RULES.prj_exports += "rom/tsdevicedialog_resources.iby  LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(tsdevicedialog_resources.iby)"
--- a/taskswitcher/rom/bld.inf	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/rom/bld.inf	Wed Oct 06 16:00:22 2010 +0300
@@ -19,7 +19,9 @@
 
 PRJ_EXPORTS
 
-tstaskmonitor_core.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(tstaskmonitor_core.iby)
+tstaskmonitor_core.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(tstaskmonitor_core.iby)
+tsdevicedialog_core.iby  CORE_MW_LAYER_IBY_EXPORT_PATH(tsdevicedialog_core.iby)
+tsdevicedialog_resources.iby  LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(tsdevicedialog_resources.iby)
 ../sis/stubs/taskmonitor_stub.sis  /epoc32/release/winscw/udeb/z/system/install/taskmonitor_stub.sis
 ../sis/stubs/taskmonitor_stub.sis  /epoc32/data/z/system/install/taskmonitor_stub.sis
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/rom/tsdevicedialog_core.iby	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __TSDEVICEDIALOG_CORE_IBY__
+#define __TSDEVICEDIALOG_CORE_IBY__
+
+file=ABI_DIR\BUILD_DIR\tsdevicedialogplugin.dll					       SHARED_LIB_DIR\tsdevicedialogplugin.dll
+data=\epoc32\data\z\resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin    resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin
+
+// stub sis
+data=ZSYSTEM/install/taskswitcher_stub.sis                  system/install/taskswitcher_stub.sis
+
+// qcrml
+data=\epoc32\data\z\resource\qt\crml\tsdevicedialog.qcrml   resource\qt\crml\tsdevicedialog.qcrml
+
+#endif //__TSAPP_CORE_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/rom/tsdevicedialog_resources.iby	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,23 @@
+/*
+* 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 __TSDEVICEDIALOG_LANGUAGE_IBY__
+#define __TSDEVICEDIALOG_LANGUAGE_IBY__
+
+// -------- hsapplication
+data=DATAZ_\resource\qt\translations\taskswitcher.qm resource\qt\translations\taskswitcher.qm 
+
+#endif //__TSAPP_LANGUAGE_IBY__
--- a/taskswitcher/screenshotplugin/group/tsscreenshotplugin.mmp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/screenshotplugin/group/tsscreenshotplugin.mmp	Wed Oct 06 16:00:22 2010 +0300
@@ -51,3 +51,6 @@
 LIBRARY         sensrvutil.lib 
 LIBRARY         centralrepository.lib
 DEBUGLIBRARY    flogger.lib
+
+
+SMPSAFE
--- a/taskswitcher/screenshotplugin/inc/tsscreenshotplugin.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/screenshotplugin/inc/tsscreenshotplugin.h	Wed Oct 06 16:00:22 2010 +0300
@@ -55,7 +55,7 @@
     void SendMessageL( const TDesC8& aMessage );
 
 private:
-    CTsIdList* iBlockedList;
+    CTsIdList* iAllowedList;
     RPointerArray<CTsScreenshotNotifier> iCache;
     TInt iWindowGroupId;
 };
--- a/taskswitcher/screenshotplugin/src/tsscreenshotplugin.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/screenshotplugin/src/tsscreenshotplugin.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -58,7 +58,7 @@
                              TWservCrEvent::EWindowGroupChanged |
                              TWservCrEvent::EDeviceOrientationChanged);
     iWindowGroupId = KInvalidGroupId;
-    iBlockedList = CTsIdList::NewL(); 
+    iAllowedList = CTsIdList::NewL(); 
     }
 
 
@@ -68,7 +68,7 @@
  */
 CTsScreenshotPlugin::~CTsScreenshotPlugin()
     {
-    delete iBlockedList;
+    delete iAllowedList;
     Env().UnregisterEventHandler(this);
     iCache.ResetAndDestroy();
     }
@@ -118,11 +118,11 @@
             }
         CleanupStack::PopAndDestroy( screenshotMsg );
         }
-    else if( IgnoreWindowGroups == function )
+    else if( AllowedWindowGroups == function )
         {
         CTsIdList* list = CTsIdList::NewLC( msgStream );
-        delete iBlockedList;
-        iBlockedList = list;
+        delete iAllowedList;
+        iAllowedList = list;
         CleanupStack::Pop( list );
         }
     CleanupStack::PopAndDestroy( &msgStream );
@@ -140,12 +140,15 @@
         if( KInvalidGroupId != iWindowGroupId )
             {
             NotifyWindowGroupToBackground( iWindowGroupId );
-            TakeScreenshot( iWindowGroupId );
+            if(iAllowedList->IsPresent(iWindowGroupId))
+                {
+                TakeScreenshot( iWindowGroupId );
+                }
             }
         iWindowGroupId = aEvent.WindowGroupIdentifier();
         break;
     case TWservCrEvent::EDeviceOrientationChanged:
-        if( !iBlockedList->IsPresent( iWindowGroupId ) )
+        if( iAllowedList->IsPresent( iWindowGroupId ) )
             {
             TakeScreenshot( iWindowGroupId );
             }
--- a/taskswitcher/server/inc/tsdatalist.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/inc/tsdatalist.h	Wed Oct 06 16:00:22 2010 +0300
@@ -23,7 +23,7 @@
 
 #include <HbIcon>
 
-#include "tswindowgroupsobserver.h"
+#include "tswindowgroupsobserverbase.h"
 #include "tsentry.h"
 #include "tsdatastorage.h"
 #include "tsdataobserver.h"
@@ -31,13 +31,13 @@
 
 class CApaWindowGroupName;
 class CFbsBitmap;
+class MTsRunningApplication;
 
-NONSHARABLE_CLASS( CTsDataList ) : public CTsWindowGroupsObserver,
+NONSHARABLE_CLASS( CTsDataList ) : public CTsWindowGroupsObserverBase,
                                    public MTsDataStorage
     {
 public:
     static CTsDataList* NewL( MTsResourceManager& aResources, 
-                              MTsWindowGroupsMonitor& aMonitor, 
                               MTsDataObserver& aObserver,
                               TsEnv& aEnv );
 
@@ -45,7 +45,6 @@
 
 private:
     CTsDataList( MTsResourceManager& aResources,
-                 MTsWindowGroupsMonitor& aMonitor, 
                  MTsDataObserver& aObserver,
                  TsEnv& aEnv);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/inc/tsresourcemanagerimp.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,70 @@
+/*
+ * 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 TSRESOURCEMANAGERIMP_H
+#define TSRESOURCEMANAGERIMP_H
+
+#include <e32base.h>
+#include <w32std.h>
+#include <apgcli.h>
+
+#include "tsresourcemanager.h"
+
+class CTsWindowGroupsMonitor;
+
+/**
+ * Resource manager implemetatioin
+ */
+class CTsResourceManager: public CBase,
+                          public MTsResourceManager
+                              {
+public:
+    /**
+     * Two phase constructor
+     */
+    static CTsResourceManager* NewL();
+    
+    /**
+     * Destructor
+     */
+    ~CTsResourceManager();
+    
+    /**
+     * @see MTsResourceManager::WsSession
+     */
+    RWsSession& WsSession();
+    
+    /**
+     * @see MTsResourceManager::ApaSession
+     */
+    RApaLsSession& ApaSession();
+    
+    MTsWindowGroupsMonitor& WsMonitor();
+
+private:
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private:
+   RWsSession mWsSession;
+   RApaLsSession mApaSeesion;
+   CTsWindowGroupsMonitor* iMonitor;
+
+    };
+
+#endif // TSRESOURCEMANAGER_H
--- a/taskswitcher/server/inc/tsrunningapp.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +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 TSRUNNINGAPP_H
-#define TSRUNNINGAPP_H
-
-#include <e32base.h>
-
-#include "tswindowgroupsobserver.h"
-
-class CApaWindowGroupName;
-
-class CTsRunningApp: public CBase,
-                     public MTsRunningApplication
-{
-public:
-    static CTsRunningApp* NewLC( MTsResourceManager& aResources,
-                                 const RWsSession::TWindowGroupChainInfo& aInfo );
-    ~CTsRunningApp();
-
-private:
-    CTsRunningApp( MTsResourceManager& aResources,
-                   const RWsSession::TWindowGroupChainInfo& aInfo );
-    const CApaWindowGroupName& WindowGroupNameL() const;
-
-public://from MTsRunningApplication
-    TUid UidL()const;
-    const TDesC& CaptionL() const;
-    TBool IsHiddenL() const;
-    TBool IsSystemL() const;
-    TInt WindowGroupId() const;
-    TInt ParentWindowGroupId() const;
-    TBool IsEmbeded() const;
-    
-
-private:
-    MTsResourceManager& iResources;
-    const RWsSession::TWindowGroupChainInfo iWindowGroupInfo;
-    mutable CApaWindowGroupName* iWindowGroupName;
-    mutable TPtrC iCaption;
-};
-
-#endif//TSRUNNINGAPP_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/inc/tsrunningappimp.h	Wed Oct 06 16:00:22 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 :
+ *
+ */
+#ifndef TSRUNNINGAPP_H
+#define TSRUNNINGAPP_H
+
+#include <e32base.h>
+#include <w32std.h>
+
+#include "tsrunningapp.h"
+
+class CApaWindowGroupName;
+class MTsResourceManager;
+
+class CTsRunningApp: public CBase,
+                     public MTsRunningApplication
+{
+public:
+    static CTsRunningApp* NewLC( MTsResourceManager& aResources,
+                                 const RWsSession::TWindowGroupChainInfo& aInfo );
+    ~CTsRunningApp();
+
+private:
+    CTsRunningApp( MTsResourceManager& aResources,
+                   const RWsSession::TWindowGroupChainInfo& aInfo );
+    const CApaWindowGroupName& WindowGroupNameL() const;
+
+public://from MTsRunningApplication
+    TUid UidL()const;
+    const TDesC& CaptionL() const;
+    TBool IsHiddenL() const;
+    TBool IsSystemL() const;
+    TInt WindowGroupId() const;
+    TInt ParentWindowGroupId() const;
+    TBool IsEmbeded() const;
+    
+
+private:
+    MTsResourceManager& iResources;
+    const RWsSession::TWindowGroupChainInfo iWindowGroupInfo;
+    mutable CApaWindowGroupName* iWindowGroupName;
+    mutable TPtrC iCaption;
+};
+
+#endif//TSRUNNINGAPP_H
--- a/taskswitcher/server/inc/tsrunningappmodel.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/inc/tsrunningappmodel.h	Wed Oct 06 16:00:22 2010 +0300
@@ -21,8 +21,7 @@
 #include "tsdatastorage.h"
 #include "tsdataobserver.h"
 
-#include "tswindowgroupsobserver.h"
-
+class MTsResourceManager;
 class CTsDataList;
 class CTsScreenshotProvider;
 class TsEnv;
@@ -35,25 +34,20 @@
 
 public:
     static CTsRunningAppModel *NewL( MTsResourceManager &aResources, 
-                                     MTsWindowGroupsMonitor &aMonitor,
                                      TsEnv& aEnv );
     static CTsRunningAppModel *NewLC( MTsResourceManager &aResources, 
-                                      MTsWindowGroupsMonitor &aMonitor,
                                       TsEnv& aEnv );
     ~CTsRunningAppModel();
     
 private:
     CTsRunningAppModel( MTsResourceManager &aResources );
     void ConstructL( MTsResourceManager &aResources, 
-                     MTsWindowGroupsMonitor &aMonitor,
                      TsEnv& aEnv);
 
-// MHsDataObserver interface implementation
-public:
+public: // MHsDataObserver interface implementation
     virtual void DataChanged();
-    
-// MTsDataStorage interface implementation    
-public:
+
+public: // MTsDataStorage interface implementation
     TBool IsSupported( TInt aFunction ) const;
     void HandleDataL( TInt aFunction, RReadStream& aDataStream );
     
--- a/taskswitcher/server/inc/tsrunningappserver.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/inc/tsrunningappserver.h	Wed Oct 06 16:00:22 2010 +0300
@@ -25,7 +25,6 @@
 #include "tsenv.h"
 
 class CTsResourceManager;
-class CTsWindowGroupsMonitor;
 class MTsModel;
 class CTsRunningAppModel;
 class CTsStorage;
@@ -57,7 +56,6 @@
 private:
     TsEnv iEnv;
     CTsResourceManager* iResources;
-    CTsWindowGroupsMonitor* iMonitor;
     CTsSerializedDataProvider* iSerializer;
     CTsStorage* iStorage; 
     CTsServiceProvider* iServiceProvider;
--- a/taskswitcher/server/inc/tsrunningappstorage.h	Mon Sep 27 11:31:59 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 :
- *
- */
-#ifndef TSREUNNINGAPPSTORAGE_H
-#define TSREUNNINGAPPSTORAGE_H
-
-#include "tswindowgroupsobserver.h"
-
-class CTsRunningApp;
-
-class CTsRunningAppStorage: public CBase,
-                            public MTsRunningApplicationStorage
-{
-public:
-    static CTsRunningAppStorage* NewLC();
-    ~CTsRunningAppStorage();
-    void HandleWindowGroupChanged( 
-           MTsResourceManager &aResources, 
-           const TArray<RWsSession::TWindowGroupChainInfo> & aWindowGroups );
-    void HandleWindowGroupChanged( 
-           MTsResourceManager &aResources, 
-           const TArray<RWsSession::TWindowGroupChainInfo>& aWindowGroups,
-           const TArray<RWsSession::TWindowGroupChainInfo>& aFilteredWindowGroups);
-public:
-    const MTsRunningApplication& operator[] (TInt aOffset) const;
-    TInt Count() const;
-    TInt ParentIndex( const MTsRunningApplication& aRunningApp ) const;
-    TArray<TInt> BlockedWindowGroups() const;
-    
-private:
-    TInt ParentIndex( TInt aOffset ) const;
-    TInt Find(TInt aWindowGroupId, TInt aOffset =0) const;
-
-private:
-    CTsRunningAppStorage();
-
-private:
-    RPointerArray<CTsRunningApp> iRunningApps;
-    RArray<TInt> iBlockedWindowGroups;
-};
-#endif//TSREUNNINGAPPSTORAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/inc/tsrunningappstorageimp.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies 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 TSREUNNINGAPPSTORAGEIMP_H
+#define TSREUNNINGAPPSTORAGEIMP_H
+
+#include "tsrunningappstorage.h"
+#include "tsrunningappimp.h"
+
+class CTsRunningAppStorage: public CBase,
+                            public MTsRunningApplicationStorage
+{
+public:
+    static CTsRunningAppStorage* NewLC();
+    ~CTsRunningAppStorage();
+    void HandleWindowGroupChanged( 
+           MTsResourceManager &aResources, 
+           const TArray<RWsSession::TWindowGroupChainInfo> & aWindowGroups );
+    void HandleWindowGroupChanged( 
+           MTsResourceManager &aResources, 
+           const TArray<RWsSession::TWindowGroupChainInfo>& aWindowGroups,
+           const TArray<RWsSession::TWindowGroupChainInfo>& aFilteredWindowGroups);
+public:
+    const MTsRunningApplication& operator[] (TInt aOffset) const;
+    TInt Count() const;
+    TInt ParentIndex( const MTsRunningApplication& aRunningApp ) const;
+    TArray<TInt> BlockedWindowGroups() const;
+    
+private:
+    TInt ParentIndex( TInt aOffset ) const;
+    TInt Find(TInt aWindowGroupId, TInt aOffset =0) const;
+
+private:
+    CTsRunningAppStorage();
+
+private:
+    RPointerArray<CTsRunningApp> iRunningApps;
+    RArray<TInt> iBlockedWindowGroups;
+
+};
+#endif//TSREUNNINGAPPSTORAGEIMP_H
--- a/taskswitcher/server/inc/tsscreenshotprovider.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/inc/tsscreenshotprovider.h	Wed Oct 06 16:00:22 2010 +0300
@@ -16,9 +16,14 @@
 */
 #ifndef TSSCREENSHOTPROVIDER_H
 #define TSSCREENSHOTPROVIDER_H
+
+#include <w32std.h>
+
 #include "tsdatastorage.h"
 #include "tswindowgroupsobserver.h"
-#include <w32std.h>
+
+class MTsWindowGroupsMonitor;
+class CTsIdList;
 
 class CTsScreenshotProvider: public CWsGraphic,
                              public MTsWindowGroupsObserver
@@ -36,6 +41,7 @@
 
 private:
     CTsScreenshotProvider(MTsDataStorage&, MTsWindowGroupsMonitor&);
+    void ConstructL();
     void HandleMessageL(const TDesC8&);
     void HandleWindowGroupChangedL( MTsResourceManager &aResources, 
                                     const MTsRunningApplicationStorage& aStorage );
@@ -44,6 +50,7 @@
 private:
     MTsDataStorage& iStorage;
     MTsWindowGroupsMonitor& iMonitor;
+    CTsIdList* iCache;
 };
 
 #endif //TSSCREENSHOTTASK_H
--- a/taskswitcher/server/inc/tsservice.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/inc/tsservice.h	Wed Oct 06 16:00:22 2010 +0300
@@ -24,13 +24,14 @@
 
 class QObject;
 class TsAbstractModel;
+class MTsResourceManager;
 
 class CTsService: public CBase,
                   public MTsModel,
                   public MTsDataObserver
 {
 public:
-    static CTsService* NewLC( QObject* model );
+    static CTsService* NewLC( MTsResourceManager& aResources, QObject* model );
     ~CTsService();
 
 public: //from MTsDataObserver
@@ -54,7 +55,7 @@
     
 private:
     CTsService();
-    void ConstructL( QObject* aModel );
+    void ConstructL( MTsResourceManager& aResources, QObject* aModel );
     TInt IntValueL( TInt aOffset, const char* aKey ) const;
     TTime TimeValueL( TInt aOffset, const char* aKey ) const;
     const TDesC& StringValueL( TInt aOffset, const char* aKey ) const;
--- a/taskswitcher/server/inc/tsservicesprovider.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/inc/tsservicesprovider.h	Wed Oct 06 16:00:22 2010 +0300
@@ -21,18 +21,21 @@
 #include "tsservicesproviderconfig.h"
 
 class CTsService;
+class MTsResourceManager;
 
 class CTsServiceProvider: public CBase
 {
 public:
-    static CTsServiceProvider* NewL( const CTsServiceProviderConfig& aConfig );
+    static CTsServiceProvider* NewL( MTsResourceManager& aResources, 
+                                     const CTsServiceProviderConfig& aConfig );
     ~CTsServiceProvider();
     MTsModel& operator[]( TInt aOffset ) const;
     TInt Count() const;
 
 private:
     CTsServiceProvider();
-    void Construct( const CTsServiceProviderConfig& aConfig );
+    void Construct( MTsResourceManager& aResources,
+                    const CTsServiceProviderConfig& aConfig );
 
 private:
     RPointerArray<CTsService> iServices;
--- a/taskswitcher/server/inc/tswindowgroupsmonitor.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +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 TSWINDOWGROUPMONITOR_H
-#define TSWINDOWGROUPMONITOR_H
-
-#include "tswindowgroupsobserver.h"
-
-/**
- * Window server monitor implementation.
- */
-class CTsWindowGroupsMonitor: public CActive, 
-                              public MTsWindowGroupsMonitor
-                              
-{
-public:
-    /**
-     * Two phase constructor
-     */
-    static CTsWindowGroupsMonitor* NewL(MTsResourceManager &);
-    
-    /**
-     * Destructor
-     */
-    ~CTsWindowGroupsMonitor();
-    
-    /**
-     * @see MTsWindowGroupsMonitor::SubscribeL
-     */
-    void SubscribeL(MTsWindowGroupsObserver &);
-    
-    /**
-     * @see MTsWindowGroupsMonitor::Cancel
-     */
-    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();
-    
-private:
-    /**
-     * Registry of subscribed observers
-     */
-    RPointerArray<MTsWindowGroupsObserver> iObservers;
-    
-    /**
-     * Resources manager
-     */
-    MTsResourceManager &iResources;
-    
-    /**
-     * Monitor window group
-     */
-    RWindowGroup iWg;
-};
-#endif//TSWINDOWGROUPMONITOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/inc/tswindowgroupsmonitorimp.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,103 @@
+/*
+ * 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 TSWINDOWGROUPMONITORIMP_H
+#define TSWINDOWGROUPMONITORIMP_H
+
+#include "tswindowgroupsmonitor.h"
+
+/**
+ * Window server monitor implementation.
+ */
+class CTsWindowGroupsMonitor: public CActive, 
+                              public MTsWindowGroupsMonitor
+                              
+{
+public:
+    /**
+     * Two phase constructor
+     */
+    static CTsWindowGroupsMonitor* NewL(MTsResourceManager &);
+    
+    /**
+     * Destructor
+     */
+    ~CTsWindowGroupsMonitor();
+    
+    /**
+     * @see MTsWindowGroupsMonitor::SubscribeL
+     */
+    void SubscribeL(MTsWindowGroupsObserver &);
+    
+    /**
+     * @see MTsWindowGroupsMonitor::Cancel
+     */
+    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();
+    
+private:
+    /**
+     * Registry of subscribed observers
+     */
+    RPointerArray<MTsWindowGroupsObserver> iObservers;
+    
+    /**
+     * Resources manager
+     */
+    MTsResourceManager& iResources;
+    
+    /**
+     * Monitor window group
+     */
+    RWindowGroup iWg;
+};
+#endif//TSWINDOWGROUPMONITORIMP_H
--- a/taskswitcher/server/server.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/server.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -49,17 +49,17 @@
             src/tsservicesproviderconfig.cpp \
             src/tsserviceobserver.cpp \
             src/tsmodelitemkeymsg.cpp \
-            src/tswindowgroupsmonitor.cpp \
-            src/tsrunningapp.cpp \
-            src/tsrunningappstorage.cpp \
+            src/tswindowgroupsmonitorimp.cpp \
+            src/tsrunningappimp.cpp \
+            src/tsrunningappstorageimp.cpp \
+            src/tsresourcemanagerimp.cpp \
             ../utils/src/tsentrykey.cpp \
             ../utils/src/tsentrykeygenerator.cpp \
             ../utils/src/tsentry.cpp \
             ../utils/src/tsscreenshotmsg.cpp \
             ../utils/src/tsunregscreenshotmsg.cpp \
             ../utils/src/tsvisibilitymsg.cpp \
-            ../utils/src/tswindowgroupsobserver.cpp \
-            ../utils/src/tsresourcemanager.cpp \
+            ../utils/src/tswindowgroupsobserverbase.cpp \
             ../utils/src/tsthumbnailprovider.cpp \
             ../utils/src/tsidlist.cpp \
             
@@ -85,9 +85,10 @@
             inc/tsservicesproviderconfig.h \
             inc/tsserviceobserver.h \
             inc/tsmodelitemkeymsg.h \
-            inc/tswindowgroupsmonitor.h \
-            inc/tsrunningapp.h \
-            inc/tsrunningappstorage.h \
+            inc/tswindowgroupsmonitorimp.h \
+            inc/tsrunningappimp.h \
+            inc/tsrunningappstorageimp.h \
+            inc/tsresourcemanagerimp.h \
             ../utils/inc/tsdataobserver.h \
             ../utils/inc/tsentry.h \
             ../utils/inc/tsentrykey.h \
@@ -96,8 +97,7 @@
             ../utils/inc/tsscreenshotmsg.h \
             ../utils/inc/tsunregscreenshotmsg.h \
             ../utils/inc/tsvisibilitymsg.h \
-            ../utils/inc/tsresourcemanager.h \
-            ../utils/inc/tswindowgroupsobserver.h \
+            ../utils/inc/tswindowgroupsobserverbase.h \
             ../utils/inc/tsthumbnailprovider.h \
             ../utils/inc/tsthumbnailobserver.h \
             ../utils/inc/tsidlist.h \
@@ -119,3 +119,6 @@
     TARGET.CAPABILITY = All -TCB
 }
 
+
+
+symbian:MMP_RULES += SMPSAFE
--- a/taskswitcher/server/src/tsdatalist.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/src/tsdatalist.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -27,12 +27,16 @@
 #include <apgwgnam.h>
 #include <QSizeF>
 #include <camenuiconutility.h>
+#include <apgcli.h>
 
 #include "tsdatalist.h"
 #include "tsentrykeygenerator.h"
 #include "tsscreenshotmsg.h"
 #include "tsunregscreenshotmsg.h"
 #include "tsvisibilitymsg.h"
+#include "tsresourcemanager.h"
+#include "tsrunningapp.h"
+#include "tsrunningappstorage.h"
 
 // size for the created app icons
 const TInt KAppIconWidth = 128;
@@ -48,12 +52,10 @@
  * Two-phased constructor.
  */
 CTsDataList* CTsDataList::NewL( MTsResourceManager& aResources,
-                                MTsWindowGroupsMonitor& aMonitor, 
                                 MTsDataObserver& aObserver,
                                 TsEnv& aEnv )
     {
     CTsDataList* self = new (ELeave) CTsDataList( aResources, 
-                                                  aMonitor, 
                                                   aObserver,
                                                   aEnv);
     CleanupStack::PushL( self );
@@ -67,11 +69,10 @@
  * Constructor.
  */
 CTsDataList::CTsDataList(MTsResourceManager& aResources,
-                         MTsWindowGroupsMonitor &aMonitor, 
                          MTsDataObserver& aObserver,
                          TsEnv& aEnv) 
 :
-    CTsWindowGroupsObserver( aMonitor ),
+    CTsWindowGroupsObserverBase( aResources.WsMonitor() ),
     iResources( aResources ),
     iObserver( aObserver ),
     iEnv( aEnv )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/src/tsresourcemanagerimp.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,77 @@
+/*
+ * 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 "tsresourcemanagerimp.h"
+#include "tswindowgroupsmonitorimp.h"
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+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());
+    iMonitor = CTsWindowGroupsMonitor::NewL(*this);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CTsResourceManager::~CTsResourceManager()
+{
+    delete iMonitor;
+    mApaSeesion.Close();
+    mWsSession.Close();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+RWsSession& CTsResourceManager::WsSession()
+{
+    return mWsSession;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+RApaLsSession& CTsResourceManager::ApaSession()
+{
+    return mApaSeesion;
+}
+
+// -----------------------------------------------------------------------------
+MTsWindowGroupsMonitor& CTsResourceManager::WsMonitor()
+    {
+    return *iMonitor;
+    }
--- a/taskswitcher/server/src/tsrunningapp.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +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 <apgwgnam.h>
-#include "tsrunningapp.h"
-
-//------------------------------------------------------------------------------
-CTsRunningApp* CTsRunningApp::NewLC( 
-                             MTsResourceManager& aResources,
-                             const RWsSession::TWindowGroupChainInfo& aInfo )
-    {
-    CTsRunningApp* self = new(ELeave) CTsRunningApp(aResources, aInfo);
-    CleanupStack::PushL( self );
-    return self;
-    }
-
-//------------------------------------------------------------------------------
-CTsRunningApp::~CTsRunningApp()
-    {
-    delete iWindowGroupName;
-    }
-
-//------------------------------------------------------------------------------
-CTsRunningApp::CTsRunningApp( MTsResourceManager& aResources,
-               const RWsSession::TWindowGroupChainInfo& aInfo )
-:
-iResources(aResources),
-iWindowGroupInfo(aInfo)
-    {
-    //No implementation required
-    }
-
-//------------------------------------------------------------------------------
-const CApaWindowGroupName& CTsRunningApp::WindowGroupNameL() const
-    {
-    if( 0 == iWindowGroupName )
-        {
-        iWindowGroupName = CApaWindowGroupName::NewL( iResources.WsSession(), 
-                                                      WindowGroupId() );
-        }
-    return *iWindowGroupName;
-    }
-
-//------------------------------------------------------------------------------
-TUid CTsRunningApp::UidL()const
-    {
-    return WindowGroupNameL().AppUid();
-    }
-
-//------------------------------------------------------------------------------
-const TDesC& CTsRunningApp::CaptionL() const
-    {
-    iCaption.Set(WindowGroupNameL().Caption());
-    return iCaption;
-    
-    }
-
-//------------------------------------------------------------------------------
-TInt CTsRunningApp::WindowGroupId() const
-    {
-    return iWindowGroupInfo.iId;
-    }
-
-//------------------------------------------------------------------------------
-TInt CTsRunningApp::ParentWindowGroupId() const
-    {
-    return iWindowGroupInfo.iParentId;
-    }
-
-//------------------------------------------------------------------------------
-TBool CTsRunningApp::IsEmbeded() const
-    {
-    return 0 < iWindowGroupInfo.iParentId;
-    }
-
-//------------------------------------------------------------------------------
-TBool CTsRunningApp::IsHiddenL() const
-    {
-    return WindowGroupNameL().Hidden();
-    }
-
-//------------------------------------------------------------------------------
-TBool CTsRunningApp::IsSystemL() const
-    {
-    return  WindowGroupNameL().IsSystem();
-    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/src/tsrunningappimp.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,102 @@
+/*
+ * 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 <apgwgnam.h>
+
+#include "tsrunningappimp.h"
+#include "tsresourcemanager.h"
+
+//------------------------------------------------------------------------------
+CTsRunningApp* CTsRunningApp::NewLC( 
+                             MTsResourceManager& aResources,
+                             const RWsSession::TWindowGroupChainInfo& aInfo )
+    {
+    CTsRunningApp* self = new(ELeave) CTsRunningApp(aResources, aInfo);
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+CTsRunningApp::~CTsRunningApp()
+    {
+    delete iWindowGroupName;
+    }
+
+//------------------------------------------------------------------------------
+CTsRunningApp::CTsRunningApp( MTsResourceManager& aResources,
+               const RWsSession::TWindowGroupChainInfo& aInfo )
+:
+iResources(aResources),
+iWindowGroupInfo(aInfo)
+    {
+    //No implementation required
+    }
+
+//------------------------------------------------------------------------------
+const CApaWindowGroupName& CTsRunningApp::WindowGroupNameL() const
+    {
+    if( 0 == iWindowGroupName )
+        {
+        iWindowGroupName = CApaWindowGroupName::NewL( iResources.WsSession(), 
+                                                      WindowGroupId() );
+        }
+    return *iWindowGroupName;
+    }
+
+//------------------------------------------------------------------------------
+TUid CTsRunningApp::UidL()const
+    {
+    return WindowGroupNameL().AppUid();
+    }
+
+//------------------------------------------------------------------------------
+const TDesC& CTsRunningApp::CaptionL() const
+    {
+    iCaption.Set(WindowGroupNameL().Caption());
+    return iCaption;
+    
+    }
+
+//------------------------------------------------------------------------------
+TInt CTsRunningApp::WindowGroupId() const
+    {
+    return iWindowGroupInfo.iId;
+    }
+
+//------------------------------------------------------------------------------
+TInt CTsRunningApp::ParentWindowGroupId() const
+    {
+    return iWindowGroupInfo.iParentId;
+    }
+
+//------------------------------------------------------------------------------
+TBool CTsRunningApp::IsEmbeded() const
+    {
+    return 0 < iWindowGroupInfo.iParentId;
+    }
+
+//------------------------------------------------------------------------------
+TBool CTsRunningApp::IsHiddenL() const
+    {
+    return WindowGroupNameL().Hidden();
+    }
+
+//------------------------------------------------------------------------------
+TBool CTsRunningApp::IsSystemL() const
+    {
+    return  WindowGroupNameL().IsSystem();
+    }
--- a/taskswitcher/server/src/tsrunningappmodel.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/src/tsrunningappmodel.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -20,29 +20,26 @@
 #include <apgtask.h>
 
 #include "tsrunningappmodel.h"
-
-#include "tsrunningappstorage.h"
-
+#include "tsrunningappstorageimp.h"
 #include "tsdatalist.h"
 #include "tsmodelobserver.h"
 #include "tsscreenshotprovider.h"
+#include "tsresourcemanager.h"
 
 CTsRunningAppModel *CTsRunningAppModel::NewL( MTsResourceManager& aResources, 
-                                              MTsWindowGroupsMonitor& aMonitor,
                                               TsEnv& aEnv )
     {
-    CTsRunningAppModel *self = CTsRunningAppModel::NewLC( aResources, aMonitor, aEnv );
+    CTsRunningAppModel *self = CTsRunningAppModel::NewLC( aResources, aEnv );
     CleanupStack::Pop( self );
     return self;
     }
 
 CTsRunningAppModel *CTsRunningAppModel::NewLC( MTsResourceManager& aResources, 
-                                               MTsWindowGroupsMonitor& aMonitor,
                                                TsEnv& aEnv )
     {
     CTsRunningAppModel *self = new (ELeave) CTsRunningAppModel( aResources );
     CleanupStack::PushL( self );
-    self->ConstructL( aResources, aMonitor, aEnv );
+    self->ConstructL( aResources, aEnv );
     return self;
     }
 
@@ -59,11 +56,11 @@
     }
 
 void CTsRunningAppModel::ConstructL( MTsResourceManager& aResources, 
-                                     MTsWindowGroupsMonitor& aMonitor,
                                      TsEnv& aEnv)
     {
-    iDataList = CTsDataList::NewL( aResources, aMonitor, *this, aEnv );
-    iScreenshotProvider = CTsScreenshotProvider::NewL(*iDataList, aMonitor );
+    iDataList = CTsDataList::NewL( aResources, *this, aEnv );
+    iScreenshotProvider = 
+        CTsScreenshotProvider::NewL(*iDataList, aResources.WsMonitor());
     
     RArray<RWsSession::TWindowGroupChainInfo> wgList;
     CleanupClosePushL( wgList );
--- a/taskswitcher/server/src/tsrunningappserver.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/src/tsrunningappserver.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -18,8 +18,9 @@
 #include "tstaskmonitorglobals.h"
 #include "tsrunningappserver.h"
 #include "tsrunningappsession.h"
+#include "tsresourcemanagerimp.h"
 #include "tsbacksteppingactivation.h"
-#include "tswindowgroupsmonitor.h"
+#include "tswindowgroupsmonitorimp.h"
 #include "tsmodel.h"
 #include "tsstorage.h"
 #include "tsservicesprovider.h"
@@ -48,7 +49,6 @@
     delete iAppsModel;
     delete iServiceProvider;
     delete iSerializer;
-    delete iMonitor;
     }
 
 // -----------------------------------------------------------------------------
@@ -71,18 +71,17 @@
     {
     StartL(KRunningAppServerName);
     iResources = CTsResourceManager::NewL();
-    iMonitor = CTsWindowGroupsMonitor::NewL(*iResources);
     
     iSerializer = CTsSerializedDataProvider::NewL(*this);
     
     RPointerArray<MTsModel> providers;
     CleanupClosePushL(providers);
     
-    iAppsModel = CTsRunningAppModel::NewL(*iResources, *iMonitor, iEnv);
+    iAppsModel = CTsRunningAppModel::NewL(*iResources, iEnv);
     providers.AppendL(iAppsModel);
     
     CTsServiceProviderConfig *cfg = CTsServiceProviderConfig::NewLC(&iEnv);
-    iServiceProvider = CTsServiceProvider::NewL(*cfg);
+    iServiceProvider = CTsServiceProvider::NewL( *iResources, *cfg);
     CleanupStack::PopAndDestroy(cfg);
     addProviders(providers, *iServiceProvider);
 
@@ -93,7 +92,7 @@
     // load initial data
     iStorage->DataChanged();
 
-    TRAP_IGNORE(iBacksteppingEngine = CTsBacksteppingActivation::NewL(*iMonitor);)
+    TRAP_IGNORE(iBacksteppingEngine = CTsBacksteppingActivation::NewL(iResources->WsMonitor());)
     }
 
 // -----------------------------------------------------------------------------
--- a/taskswitcher/server/src/tsrunningappstorage.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +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 "tsrunningappstorage.h"
-#include "tsrunningapp.h"
-//------------------------------------------------------------------------------
-CTsRunningAppStorage* CTsRunningAppStorage::NewLC()
-    {
-    CTsRunningAppStorage* self = new(ELeave) CTsRunningAppStorage();
-    CleanupStack::PushL( self );
-    return self;
-    }
-
-//------------------------------------------------------------------------------
-CTsRunningAppStorage::CTsRunningAppStorage()
-    {
-    //No implementation required
-    }
-
-//------------------------------------------------------------------------------
-CTsRunningAppStorage::~CTsRunningAppStorage()
-{
-    iRunningApps.ResetAndDestroy();
-}
-
-//------------------------------------------------------------------------------
-void CTsRunningAppStorage::HandleWindowGroupChanged( 
-               MTsResourceManager &aResources, 
-               const TArray<RWsSession::TWindowGroupChainInfo> & aWindowGroups )
-    {
-    CTsRunningApp* app(0);
-    iRunningApps.ResetAndDestroy();
-    iBlockedWindowGroups.Reset();
-    TRAP_IGNORE(
-    for( TInt iter(0); iter < aWindowGroups.Count(); ++iter )
-        {
-        app = CTsRunningApp::NewLC(aResources, aWindowGroups[iter]);
-        iRunningApps.AppendL(app);
-        CleanupStack::Pop(app);
-        }
-    )//TRAP_IGNORE
-    }
-
-//------------------------------------------------------------------------------
-void CTsRunningAppStorage::HandleWindowGroupChanged( 
-           MTsResourceManager &aResources, 
-           const TArray<RWsSession::TWindowGroupChainInfo>& aFull,
-           const TArray<RWsSession::TWindowGroupChainInfo>& aFiltered)
-    {
-    TInt filtered(0);
-    HandleWindowGroupChanged(aResources, aFiltered);
-    for(TInt full(0); full < aFull.Count(); ++full)
-        {
-        for(filtered = 0; filtered < aFiltered.Count(); ++filtered)
-            {
-            if(aFull[full].iId == aFiltered[ filtered].iId)
-                {
-                break;
-                }
-            }
-        if(aFiltered.Count() == filtered)
-            {
-            iBlockedWindowGroups.Append(aFull[full].iId);
-            }
-        }
-    }
-//------------------------------------------------------------------------------
-const MTsRunningApplication& CTsRunningAppStorage::operator[] (TInt aOffset) const
-    {
-    return *iRunningApps[aOffset];
-    }
-
-//------------------------------------------------------------------------------
-TInt CTsRunningAppStorage::Count() const
-    {
-    return iRunningApps.Count();
-    }
-
-//------------------------------------------------------------------------------
-TInt CTsRunningAppStorage::ParentIndex( const MTsRunningApplication& aRunningApp ) const
-    {
-    const TInt applicationIndex(Find(aRunningApp.WindowGroupId()));
-    return KErrNotFound == applicationIndex ? 
-           applicationIndex : ParentIndex(applicationIndex);
-    }
-
-//------------------------------------------------------------------------------
-TArray<TInt> CTsRunningAppStorage::BlockedWindowGroups() const
-    {
-    return iBlockedWindowGroups.Array();
-    }
-
-//------------------------------------------------------------------------------
-TInt CTsRunningAppStorage::ParentIndex( TInt aOffset ) const
-    {
-    TInt retval(aOffset);
-    if(iRunningApps[aOffset]->IsEmbeded())
-        {
-        const TInt parentIndex( Find(iRunningApps[aOffset]->ParentWindowGroupId(), 
-                                aOffset + 1) );
-        if( KErrNotFound != parentIndex )
-            {
-            retval = ParentIndex( parentIndex );
-            }
-        }
-    return retval;
-    }
-
-//------------------------------------------------------------------------------
-TInt CTsRunningAppStorage::Find(TInt aWindowGroupId, TInt aOffset) const
-    {
-    TInt retVal(KErrNotFound);
-    for( TInt iter(aOffset); 
-         KErrNotFound == retVal && iter < iRunningApps.Count(); 
-         ++iter )
-        {
-        if( iRunningApps[iter]->WindowGroupId() == aWindowGroupId )
-            {
-            retVal = iter;
-            }
-        }
-    return retVal;
-    }
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/src/tsrunningappstorageimp.cpp	Wed Oct 06 16:00:22 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 "tsrunningappstorageimp.h"
+//------------------------------------------------------------------------------
+CTsRunningAppStorage* CTsRunningAppStorage::NewLC()
+    {
+    CTsRunningAppStorage* self = new(ELeave) CTsRunningAppStorage();
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+CTsRunningAppStorage::CTsRunningAppStorage()
+    {
+    //No implementation required
+    }
+
+//------------------------------------------------------------------------------
+CTsRunningAppStorage::~CTsRunningAppStorage()
+{
+    iRunningApps.ResetAndDestroy();
+}
+
+//------------------------------------------------------------------------------
+void CTsRunningAppStorage::HandleWindowGroupChanged( 
+               MTsResourceManager &aResources, 
+               const TArray<RWsSession::TWindowGroupChainInfo> & aWindowGroups )
+    {
+    CTsRunningApp* app(0);
+    iRunningApps.ResetAndDestroy();
+    iBlockedWindowGroups.Reset();
+    TRAP_IGNORE(
+    for( TInt iter(0); iter < aWindowGroups.Count(); ++iter )
+        {
+        app = CTsRunningApp::NewLC(aResources, aWindowGroups[iter]);
+        iRunningApps.AppendL(app);
+        CleanupStack::Pop(app);
+        }
+    )//TRAP_IGNORE
+    }
+
+//------------------------------------------------------------------------------
+void CTsRunningAppStorage::HandleWindowGroupChanged( 
+           MTsResourceManager &aResources, 
+           const TArray<RWsSession::TWindowGroupChainInfo>& aFull,
+           const TArray<RWsSession::TWindowGroupChainInfo>& aFiltered)
+    {
+    TInt filtered(0);
+    HandleWindowGroupChanged(aResources, aFiltered);
+    for(TInt full(0); full < aFull.Count(); ++full)
+        {
+        for(filtered = 0; filtered < aFiltered.Count(); ++filtered)
+            {
+            if(aFull[full].iId == aFiltered[ filtered].iId)
+                {
+                break;
+                }
+            }
+        if(aFiltered.Count() == filtered)
+            {
+            iBlockedWindowGroups.Append(aFull[full].iId);
+            }
+        }
+    }
+//------------------------------------------------------------------------------
+const MTsRunningApplication& CTsRunningAppStorage::operator[] (TInt aOffset) const
+    {
+    return *iRunningApps[aOffset];
+    }
+
+//------------------------------------------------------------------------------
+TInt CTsRunningAppStorage::Count() const
+    {
+    return iRunningApps.Count();
+    }
+
+//------------------------------------------------------------------------------
+TInt CTsRunningAppStorage::ParentIndex( const MTsRunningApplication& aRunningApp ) const
+    {
+    const TInt applicationIndex(Find(aRunningApp.WindowGroupId()));
+    return KErrNotFound == applicationIndex ? 
+           applicationIndex : ParentIndex(applicationIndex);
+    }
+
+//------------------------------------------------------------------------------
+TArray<TInt> CTsRunningAppStorage::BlockedWindowGroups() const
+    {
+    return iBlockedWindowGroups.Array();
+    }
+
+//------------------------------------------------------------------------------
+TInt CTsRunningAppStorage::ParentIndex( TInt aOffset ) const
+    {
+    TInt retval(aOffset);
+    if(iRunningApps[aOffset]->IsEmbeded())
+        {
+        const TInt parentIndex( Find(iRunningApps[aOffset]->ParentWindowGroupId(), 
+                                aOffset + 1) );
+        if( KErrNotFound != parentIndex )
+            {
+            retval = ParentIndex( parentIndex );
+            }
+        }
+    return retval;
+    }
+
+//------------------------------------------------------------------------------
+TInt CTsRunningAppStorage::Find(TInt aWindowGroupId, TInt aOffset) const
+    {
+    TInt retVal(KErrNotFound);
+    for( TInt iter(aOffset); 
+         KErrNotFound == retVal && iter < iRunningApps.Count(); 
+         ++iter )
+        {
+        if( iRunningApps[iter]->WindowGroupId() == aWindowGroupId )
+            {
+            retVal = iter;
+            }
+        }
+    return retVal;
+    }
+
+
--- a/taskswitcher/server/src/tsscreenshotprovider.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/src/tsscreenshotprovider.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -16,6 +16,9 @@
 */
 #include <s32mem.h>
 
+#include "tswindowgroupsmonitor.h"
+#include "tsrunningapp.h"
+#include "tsrunningappstorage.h"
 #include "tsscreenshotprovider.h"
 #include "tstaskmonitorglobals.h"
 #include "tsscreenshotmsg.h"
@@ -23,7 +26,8 @@
 
 
 const TUid KPluginUID = {0x200267AE};
-const TInt KSkippedApp [] = {0x20022F35 /* <-- hsapplication */};
+const TInt KSkippedApp [] = {0x20022F35 /* <-- hsapplication */,
+                             0x100058F3 /* <-- sysapp*/};
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
@@ -33,8 +37,7 @@
     {
     CTsScreenshotProvider *self = new (ELeave)CTsScreenshotProvider(aStorage, aMonitor);
     CleanupStack::PushL( self );
-    self->BaseConstructL(KPluginUID, KNullDesC8);
-    aMonitor.SubscribeL(*self);
+    self->ConstructL();
     CleanupStack::Pop( self );
     return self;
     }
@@ -49,9 +52,19 @@
     //No implementation required
     }
 
+// -----------------------------------------------------------------------------
+void CTsScreenshotProvider::ConstructL()
+    {
+    BaseConstructL(KPluginUID, KNullDesC8);
+    iCache = CTsIdList::NewL();
+    iMonitor.SubscribeL(*this);
+    }
+
+// -----------------------------------------------------------------------------
 CTsScreenshotProvider::~CTsScreenshotProvider()
     {
     iMonitor.Cancel(*this);
+    delete iCache;
     }
 
 // -----------------------------------------------------------------------------
@@ -75,39 +88,40 @@
     {
     const TInt count(sizeof( KSkippedApp ) / sizeof(TInt));
     CTsIdList* list = CTsIdList::NewLC();
-    list->AppendL(aStorage.BlockedWindowGroups());//filtered servers
-    for( TInt iter(0); iter < aStorage.Count(); ++iter )
+    for( TInt allowed(0); allowed < aStorage.Count(); ++allowed )
         {
-        if(aStorage[iter].IsHiddenL())
+        if(!aStorage[allowed].IsHiddenL())
             {
-            list->AppendL(aStorage[iter].WindowGroupId());
-            }
-        else
-            {
-            for(TInt blocked(0); blocked < count; ++blocked)
+            TBool isBlocked(EFalse);
+            for( TInt blocked(0); !isBlocked && blocked < count; ++blocked )
                 {
-                if(aStorage[iter].UidL().iUid == KSkippedApp[blocked])
-                    {
-                    list->AppendL(aStorage[iter].WindowGroupId());
-                    }
+                isBlocked = (KSkippedApp[blocked] == aStorage[allowed].UidL().iUid);
+                }
+            if(!isBlocked)
+                {
+                list->AppendL(aStorage[allowed].WindowGroupId());
                 }
             }
         }
-    
-    RBuf8 message;
-    CleanupClosePushL(message);
-    message.CreateL(list->Size() + sizeof(TInt));
-    
-    RDesWriteStream stream;
-    CleanupClosePushL(stream);
-    stream.Open(message);
-    stream.WriteInt32L(IgnoreWindowGroups);
-    stream << (*list);
-    CleanupStack::PopAndDestroy(&stream);
-    
-    SendMessage(message);
-    CleanupStack::PopAndDestroy(&message);
-    CleanupStack::PopAndDestroy(list);
+    if( *iCache != *list )
+        {
+        RBuf8 message;
+        CleanupClosePushL(message);
+        message.CreateL(list->Size() + sizeof(TInt));
+            
+        RDesWriteStream stream;
+        CleanupClosePushL(stream);
+        stream.Open(message);
+        stream.WriteInt32L(AllowedWindowGroups);
+        stream << (*list);
+        CleanupStack::PopAndDestroy(&stream);
+        
+        SendMessage(message);
+        CleanupStack::PopAndDestroy(&message);
+        }
+    delete iCache;
+    iCache = list;
+    CleanupStack::Pop(list);
     }
 
 // -----------------------------------------------------------------------------
--- a/taskswitcher/server/src/tsservice.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/src/tsservice.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -23,6 +23,8 @@
 #include "tsservice.h"
 #include "tsmodelobserver.h"
 #include "tsserviceobserver.h"
+#include "tsresourcemanager.h"
+
 
 // -----------------------------------------------------------------------------
 LOCAL_C QVariantHash valueL( QObject *aModel, TInt aOffset )
@@ -40,11 +42,11 @@
     }
 
 // -----------------------------------------------------------------------------
-CTsService* CTsService::NewLC(QObject* model)
+CTsService* CTsService::NewLC(MTsResourceManager& resources, QObject* model)
     {
     CTsService *self = new (ELeave)CTsService();
     CleanupStack::PushL(self);
-    self->ConstructL(model);
+    self->ConstructL(resources, model);
     return self;
     }
 
@@ -55,7 +57,7 @@
     }
 
 // -----------------------------------------------------------------------------
-void CTsService::ConstructL( QObject* model )
+void CTsService::ConstructL( MTsResourceManager& resources, QObject* model )
     {
     iModel = model;
     User::LeaveIfNull(iModel);
@@ -67,6 +69,9 @@
                      SIGNAL(dataChanged()),
                      iServiceObserver,
                      SLOT(dataChanged()));
+    QMetaObject::invokeMethod(iModel,
+                              "setResources",
+                              Q_ARG(MTsResourceManager&, resources));
     }
 
 // -----------------------------------------------------------------------------
@@ -146,7 +151,9 @@
 // -----------------------------------------------------------------------------
 TBool CTsService::IsMandatoryL( TInt aOffset ) const
     {
-    return IntValueL(aOffset, "TaskIsMandatory" );
+    const QVariantHash values(valueL(iModel, aOffset));
+    const QString key("TaskIsMandatory");
+    return values.contains(key) ? values.value(key).toInt() : ETrue;
     }
 
 // -----------------------------------------------------------------------------
--- a/taskswitcher/server/src/tsservicesprovider.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/server/src/tsservicesprovider.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -24,10 +24,11 @@
  * @return address to initialized services provider instance 
  */
 CTsServiceProvider* CTsServiceProvider::NewL( 
+                                       MTsResourceManager& aResources,
                                        const CTsServiceProviderConfig& aConfig )
     {
     CTsServiceProvider* self = new (ELeave)CTsServiceProvider();
-    self->Construct( aConfig );
+    self->Construct( aResources, aConfig );
     return self;
     }
 
@@ -46,12 +47,13 @@
  * @param aConfig - serivces provider configurator
  * 
  */
-void CTsServiceProvider::Construct( const CTsServiceProviderConfig& aConfig )
+void CTsServiceProvider::Construct( MTsResourceManager& aResources, 
+                                    const CTsServiceProviderConfig& aConfig )
     {
     CTsService* srvPtr(0);
     for( TInt iter(0); iter < aConfig.Count(); ++iter ) 
         {
-        TRAP_IGNORE( srvPtr = CTsService::NewLC( aConfig.LoadL( iter ) );
+        TRAP_IGNORE( srvPtr = CTsService::NewLC(aResources, aConfig.LoadL( iter ) );
                      iServices.AppendL( srvPtr );
                      CleanupStack::Pop( srvPtr ); )
         }
--- a/taskswitcher/server/src/tswindowgroupsmonitor.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +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 <apgwgnam.h>
-#include "tswindowgroupsobserver.h"
-#include "tswindowgroupsmonitor.h"
-#include "tsrunningappstorage.h"
-
-
-const int KOrdinalPositionNoZOrder(-1);
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-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),
-    iResources(resources)
-{
-    CActiveScheduler::Add(this);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::ConstructL()
-{
-    
-    // Initial window group
-    iWg = RWindowGroup (iResources.WsSession());
-    User::LeaveIfError (iWg.Construct ((TUint32)&iWg, EFalse));
-    iWg.SetOrdinalPosition (KOrdinalPositionNoZOrder);
-    iWg.EnableReceiptOfFocus (EFalse);
-    
-    // Hide window
-    CApaWindowGroupName* wn = CApaWindowGroupName::NewLC(iResources.WsSession());
-    wn->SetHidden (ETrue);
-    wn->SetWindowGroupName (iWg);
-    CleanupStack::PopAndDestroy (wn);
-    
-    // Window group change event
-    User::LeaveIfError (iWg.EnableGroupListChangeEvents());
-    Subscribe();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CTsWindowGroupsMonitor::~CTsWindowGroupsMonitor()
-{
-    CActive::Cancel();
-    iWg.Close();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::SubscribeL(MTsWindowGroupsObserver &observer)
-{
-    const TInt offset(iObservers.Find(&observer));
-    KErrNotFound == offset ? iObservers.InsertL(&observer, 0) : 
-                             User::Leave(KErrAlreadyExists);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::Cancel(MTsWindowGroupsObserver & observer)
-{
-    const TInt offset(iObservers.Find(&observer));
-    if (KErrNotFound != offset) {
-        iObservers.Remove(offset);
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::RunL()
-{
-    User::LeaveIfError(iStatus.Int());
-    ProvideEventL();
-    Subscribe();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::DoCancel()
-{
-    if (IsActive()) {
-        iResources.WsSession().EventReadyCancel();
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-TInt CTsWindowGroupsMonitor::RunError(TInt error)
-{
-    if (!IsActive() && KErrCancel != error) {
-        Subscribe();
-    }
-    return KErrNone;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::Subscribe()
-{
-    iResources.WsSession().EventReady( &iStatus );
-    SetActive();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsMonitor::ProvideEventL()
-{
-    TWsEvent wsEvent;
-    iResources.WsSession().GetEvent(wsEvent);
-    if( EEventWindowGroupListChanged == wsEvent.Type() )
-        {
-        
-        CTsRunningAppStorage *storage = CTsRunningAppStorage::NewLC();
-        
-        RArray<RWsSession::TWindowGroupChainInfo> filteredWgInfo, fullWgInfo;
-        CleanupClosePushL(filteredWgInfo);
-        CleanupClosePushL(fullWgInfo);
-        User::LeaveIfError(iResources.WsSession().WindowGroupList(0, &filteredWgInfo));
-        User::LeaveIfError(iResources.WsSession().WindowGroupList(&fullWgInfo));
-        storage->HandleWindowGroupChanged(iResources, 
-                                          fullWgInfo.Array(), 
-                                          filteredWgInfo.Array());
-        CleanupStack::PopAndDestroy( &fullWgInfo );
-        CleanupStack::PopAndDestroy( &filteredWgInfo );
-                
-        for( TInt iter(0); iter < iObservers.Count(); ++iter ) 
-            {
-            iObservers[iter]->HandleWindowGroupChanged( iResources, *storage );
-            }
-        CleanupStack::PopAndDestroy( storage );
-        
-        }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/src/tswindowgroupsmonitorimp.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,182 @@
+/*
+ * 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 <apgwgnam.h>
+
+#include "tswindowgroupsmonitorimp.h"
+#include "tsrunningappstorageimp.h"
+#include "tsresourcemanager.h"
+
+
+const int KOrdinalPositionNoZOrder(-1);
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+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),
+    iResources(resources)
+{
+    CActiveScheduler::Add(this);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::ConstructL()
+{
+    
+    // Initial window group
+    iWg = RWindowGroup (iResources.WsSession());
+    User::LeaveIfError (iWg.Construct ((TUint32)&iWg, EFalse));
+    iWg.SetOrdinalPosition (KOrdinalPositionNoZOrder);
+    iWg.EnableReceiptOfFocus (EFalse);
+    
+    // Hide window
+    CApaWindowGroupName* wn = CApaWindowGroupName::NewLC(iResources.WsSession());
+    wn->SetHidden (ETrue);
+    wn->SetWindowGroupName (iWg);
+    CleanupStack::PopAndDestroy (wn);
+    
+    // Window group change event
+    User::LeaveIfError (iWg.EnableGroupListChangeEvents());
+    Subscribe();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CTsWindowGroupsMonitor::~CTsWindowGroupsMonitor()
+{
+    CActive::Cancel();
+    iWg.Close();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::SubscribeL(MTsWindowGroupsObserver &observer)
+{
+    const TInt offset(iObservers.Find(&observer));
+    KErrNotFound == offset ? iObservers.InsertL(&observer, 0) : 
+                             User::Leave(KErrAlreadyExists);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::Cancel(MTsWindowGroupsObserver & observer)
+{
+    const TInt offset(iObservers.Find(&observer));
+    if (KErrNotFound != offset) {
+        iObservers.Remove(offset);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::RunL()
+{
+    User::LeaveIfError(iStatus.Int());
+    ProvideEventL();
+    Subscribe();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::DoCancel()
+{
+    if (IsActive()) {
+        iResources.WsSession().EventReadyCancel();
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CTsWindowGroupsMonitor::RunError(TInt error)
+{
+    if (!IsActive() && KErrCancel != error) {
+        Subscribe();
+    }
+    return KErrNone;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::Subscribe()
+{
+    iResources.WsSession().EventReady( &iStatus );
+    SetActive();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::ProvideEventL()
+{
+    TWsEvent wsEvent;
+    iResources.WsSession().GetEvent(wsEvent);
+    if( EEventWindowGroupListChanged == wsEvent.Type() )
+        {
+        
+        CTsRunningAppStorage *storage = CTsRunningAppStorage::NewLC();
+        
+        RArray<RWsSession::TWindowGroupChainInfo> filteredWgInfo, fullWgInfo;
+        CleanupClosePushL(filteredWgInfo);
+        CleanupClosePushL(fullWgInfo);
+        User::LeaveIfError(iResources.WsSession().WindowGroupList(0, &filteredWgInfo));
+        User::LeaveIfError(iResources.WsSession().WindowGroupList(&fullWgInfo));
+        storage->HandleWindowGroupChanged(iResources, 
+                                          fullWgInfo.Array(), 
+                                          filteredWgInfo.Array());
+        CleanupStack::PopAndDestroy( &fullWgInfo );
+        CleanupStack::PopAndDestroy( &filteredWgInfo );
+                
+        for( TInt iter(0); iter < iObservers.Count(); ++iter ) 
+            {
+            iObservers[iter]->HandleWindowGroupChanged( iResources, *storage );
+            }
+        CleanupStack::PopAndDestroy( storage );
+        
+        }
+}
--- a/taskswitcher/sis/stubs/taskmonitor_stub.pkg	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/sis/stubs/taskmonitor_stub.pkg	Wed Oct 06 16:00:22 2010 +0300
@@ -41,3 +41,7 @@
 "" - "Z:\sys\bin\activitytsplugin.dll"
 "" - "Z:\resource\qt\plugins\activitytsplugin.qtplugin"
 "" - "Z:\resource\taskswitcher\activitytsplugin.xml"
+
+""-"Z:\resource\qt\translations\taskswitcher.qm"
+""-"Z:\sys\bin\tsdevicedialogplugin.dll"
+""-"Z:\resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin"
Binary file taskswitcher/sis/stubs/taskmonitor_stub.sis has changed
--- a/taskswitcher/sis/taskmonitor.pkg	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/sis/taskmonitor.pkg	Wed Oct 06 16:00:22 2010 +0300
@@ -36,3 +36,7 @@
 "/epoc32/release/armv5/urel/activitytsplugin.dll" - "!:\sys\bin\activitytsplugin.dll"
 "/epoc32/data/z/resource/qt/plugins/activitytsplugin.qtplugin" - "!:\resource\qt\plugins\activitytsplugin.qtplugin"
 "/epoc32/data/z/resource/taskswitcher/activitytsplugin.xml" - "!:\resource\taskswitcher\activitytsplugin.xml"
+
+"/epoc32/data/z/resource/qt/translations/taskswitcher.qm"-"!:\resource\qt\translations\taskswitcher.qm"
+"/epoc32/release/armv5/urel/tsdevicedialogplugin.dll"-"!:\sys\bin\tsdevicedialogplugin.dll"
+"/epoc32/data/z/resource/plugins/devicedialogs/tsdevicedialogplugin.qtplugin"-"!:\resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin"
--- a/taskswitcher/taskswitcher.pro	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/taskswitcher.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -23,6 +23,7 @@
                server \
                screenshotplugin \
                activitytsplugin \
+               tsdevicedialogplugin \
                
     BLD_INF_RULES.prj_exports +=    "inc/tstaskmonitorglobals.h |../inc/tstaskmonitorglobals.h"
     
Binary file taskswitcher/tsdevicedialogplugin/conf/tsdevicedialog.confml has changed
Binary file taskswitcher/tsdevicedialogplugin/conf/tsdevicedialog_2002677F.crml has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsdataroles.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef TSDATAROLES_H
+#define TSDATAROLES_H
+
+namespace TsDataRoles
+{
+    enum EntryAttributes {
+        Closable = Qt::UserRole + 1,
+        Active,
+    };
+}
+
+#endif // TSDATAROLES_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsdevicedialogcontainer.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef TSDEVICEDIALOGCONTAINER_H
+#define TSDEVICEDIALOGCONTAINER_H
+
+#include <QObject>
+#include <HbDeviceDialogInterface>
+#include <QValueSpacePublisher>
+#include <QValueSpaceSubscriber>
+
+#include "tsdocumentloader.h"
+
+QTM_USE_NAMESPACE
+
+class QAbstractListModel;
+
+class TsDeviceDialogContainer : public QObject,
+                                public HbDeviceDialogInterface
+{
+    Q_OBJECT
+public:
+    explicit TsDeviceDialogContainer(QAbstractListModel *model,
+                                     QObject *parent = 0);
+    ~TsDeviceDialogContainer();
+
+public:
+    virtual bool setDeviceDialogParameters(const QVariantMap &parameters);
+    virtual int deviceDialogError() const;
+    virtual void closeDeviceDialog(bool byClient);
+    virtual HbPopup *deviceDialogWidget() const;
+    virtual QObject *signalSender() const;
+
+signals:
+    void deviceDialogClosed();
+
+public slots:
+    void changeOrientation(Qt::Orientation orientation);
+
+private slots:
+    void notifyDialogClosed();
+    void switchViewOnModelChange();
+    void handleDismissRequest();
+
+private:
+    TsDocumentLoader mLoader;
+    QValueSpacePublisher mVisibilityPublisher;
+    QValueSpaceSubscriber mDismissRequestSubscriber;
+
+    Q_DISABLE_COPY(TsDeviceDialogContainer)
+};
+
+#endif // TSDEVICEDIALOGCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsdevicedialogplugin.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* 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 TSDEVICEDIALOGPLUGIN_H
+#define TSDEVICEDIALOGPLUGIN_H
+
+#include <QVariantMap>
+
+#include <HbDeviceDialogPlugin>
+
+#include "tsdocumentloader.h"
+
+class QAbstractListModel;
+class TsTaskMonitor;
+
+class TsDeviceDialogPlugin : public HbDeviceDialogPlugin
+{
+    Q_OBJECT
+
+public:
+    TsDeviceDialogPlugin();
+    ~TsDeviceDialogPlugin();
+
+    bool accessAllowed(const QString &deviceDialogType,
+                       const QVariantMap &parameters,
+                       const QVariantMap &securityInfo) const;
+    HbDeviceDialogInterface *createDeviceDialog(const QString &deviceDialogType,
+                                                const QVariantMap &parameters);
+    bool deviceDialogInfo(const QString &deviceDialogType,
+                          const QVariantMap &parameters,
+                          DeviceDialogInfo *info) const;
+    QStringList deviceDialogTypes() const;
+    PluginFlags pluginFlags() const;
+    int error() const;
+
+private:
+    TsDocumentLoader mLoader;
+    QAbstractListModel *mModel;
+    TsTaskMonitor *mStorage;
+
+    bool mTriedToLoadTranslation;
+
+    Q_DISABLE_COPY(TsDeviceDialogPlugin)
+};
+
+#endif // TSDEVICEDIALOGPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsdocumentloader.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Screensaver custom document loader.
+*
+*/
+
+#ifndef TSDOCUMENTLOADER_H
+#define TSDOCUMENTLOADER_H
+
+#include <HbDocumentLoader>
+
+class TsDocumentLoader : public HbDocumentLoader
+{
+
+private:
+    virtual QObject *createObject(const QString &type,
+                                  const QString &name);
+
+};
+
+#endif // TSDOCUMENTLOADER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsentrymodelitem.h	Wed Oct 06 16:00:22 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: tsentrymodelitem.h
+*
+*/
+
+#ifndef TSENTRYMODELITEM_H
+#define TSENTRYMODELITEM_H
+
+#include "tsmodelitem.h"
+
+#include <QSharedPointer>
+
+class TsTask;
+
+/*!
+    Class implements model item which represents Content Arsenal entry
+*/
+class TsEntryModelItem : public TsModelItem
+{
+public:
+    TsEntryModelItem(QSharedPointer<TsTask> entry);
+    ~TsEntryModelItem();
+    QVariant data(int role) const;
+    void close();
+    void open();
+
+private:
+    const QSharedPointer<TsTask> mEntry;
+};
+
+#endif // TSMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsmodel.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,75 @@
+/*
+* 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: tsmodel.h
+*
+*/
+
+#ifndef TSMODEL_H
+#define TSMODEL_H
+
+#include <QAbstractListModel>
+#include <QList>
+#include <QSize>
+#include <QSharedPointer>
+
+#include <tstaskmonitor.h>
+
+class CaNotifier;
+class TsModelItem;
+
+class TsModel : public QAbstractListModel
+{
+    Q_OBJECT
+
+public:
+    TsModel(TsTaskMonitor &applicationSrv,
+            QObject *parent = 0);
+    ~TsModel();
+
+    int rowCount(const QModelIndex &parent = QModelIndex()) const;
+    QVariant data(const QModelIndex &index,
+                  int role = Qt::DisplayRole) const;
+    // from QAbstractModel
+    virtual bool insertRows(int row, int count, TsModelItem *item,
+                            const QModelIndex &parent = QModelIndex());
+    virtual bool removeRows(int row, int count,
+                            const QModelIndex &parent = QModelIndex());
+
+
+    bool moveRows(int oldPosition, int newPosition,
+                  const QModelIndex &parent = QModelIndex());
+    bool updateRows(int row, TsModelItem *item);
+    void fullUpdate();
+
+public slots:
+    void openApplication(const QModelIndex &index);
+    void closeApplication(const QModelIndex &index);
+    void updateApplications();
+    
+private:
+    TsModelItem *entry(const QModelIndex &index) const;
+    void getApplications();
+
+private:
+    /*
+     * List containing result
+     */
+    QList<TsModelItem *> mEntries;
+
+    TsTaskMonitor &mApplicationService;
+
+    Q_DISABLE_COPY(TsModel)
+};
+
+#endif // TSMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tsmodelitem.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* 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: tsmodelitem.h
+*
+*/
+#ifndef TSMODELITEM_H
+#define TSMODELITEM_H
+
+#include <QVariant>
+#include <QSharedPointer>
+
+#include "tsmodelitem.h"
+
+class TsTask;
+
+/*!
+    Abstract class which define model item for taskswitcher
+*/
+class TsModelItem
+{
+
+public:
+    TsModelItem(QSharedPointer<TsTask> entry);
+    ~TsModelItem();
+    QVariant data(int role) const;
+    void close();
+    void open();
+
+private:
+    const QSharedPointer<TsTask> mEntry;
+    Q_DISABLE_COPY(TsModelItem)
+    
+};
+
+#endif // TSMODELITEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tstasksgrid.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef TSTASKSGRID_H
+#define TSTASKSGRID_H
+
+#include <HbGridView>
+
+class TsTasksGrid : public HbGridView
+{
+    Q_OBJECT
+
+signals:
+    void deleteButtonClicked(const QModelIndex &index);
+
+protected:
+    virtual void polish(HbStyleParameters &params);
+
+};
+
+#endif // TSTASKSGRID_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/inc/tstasksgriditem.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies 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 TSTASKSGRIDITEM_H
+#define TSTASKSGRIDITEM_H
+
+#include <HbAbstractViewItem>
+
+class HbTextItem;
+class HbIconItem;
+class HbFrameItem;
+class HbPushButton;
+
+class TsTasksGridItem : public HbAbstractViewItem
+{
+    Q_OBJECT
+
+public:
+    TsTasksGridItem();
+    TsTasksGridItem(const TsTasksGridItem &item);
+
+    HbAbstractViewItem *createItem();
+    void updateChildItems();
+
+private slots:
+    void handleDeleteClicked();
+
+signals:
+    void deleteClicked(const QModelIndex &index);
+
+private:
+    HbIconItem *mScreenshotLabel;
+    HbTextItem *mApplicationNameLabel;
+    HbPushButton *mDeleteButton;
+
+    HbFrameItem *mActiveLabelFrame;
+    HbTextItem *mActiveLabel;
+
+};
+
+#endif //TSTASKSGRIDITEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/resource/hbdialog.css	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,14 @@
+HbDialog#tsdevicedialog::heading {
+    left: 0un;
+    right: 0un;
+    top: 0un;
+    bottom: 0un;
+    fixed-height: expr(var(hb-param-text-height-primary)+2*var(hb-param-margin-gene-popup));
+}
+
+HbDialog#tsdevicedialog::content {
+    left: -0.25un;
+    right: 0.25un;
+    bottom: 0un;
+    top: 0un;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/resource/layout.docml	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.10">
+    <widget name="tsdevicedialog" type="HbDialog">
+        <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
+            <string name="alignment" value="AlignVCenter|AlignHCenter" />
+            <string locid="txt_ts_title_task_switcher" name="plainText" value="Task switcher" />
+        </widget>
+        <widget name="gridContainer" role="HbDialog:contentWidget" type="HbWidget">
+            <widget name="taskgrid" type="TsTasksGrid">
+                <widget name="item" role="HbAbstractView:prototype" type="TsTasksGridItem"/>
+                <bool name="longPressEnabled" value="FALSE"/>
+                <bool name="itemRecycling" value="TRUE"/>
+                <enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+                <bool name="swapDimensionsOnOrientationChange" value="FALSE"/>
+                <string name="scrollDirections" value="Horizontal"/>
+                <string name="alignment" value="AlignCenter"/>
+                <integer name="rowCount" value="1"/>
+                <integer name="columnCount" value="2"/>                
+            </widget>            
+            <widget name="noitemswidget" type="HbWidget">
+                <widget name="noitemslabel" type="HbLabel">
+                    <string name="alignment" value="AlignVCenter|AlignHCenter" />
+                    <string locid="txt_ts_info_no_recent_applications" name="plainText"/>
+                    
+                    <fontspec name="fontSpec" role="Primary" textheight="var(hb-param-text-height-primary)"/>
+                    <enums name="textWrapping" value="TextWordWrap"/>                    
+                </widget>   
+                <layout orientation="Vertical" spacing="0.0un" type="linear">
+                    <contentsmargins bottom="var(hb-param-margin-gene-screen)" left="var(hb-param-margin-gene-screen)" right="var(hb-param-margin-gene-screen)" top="var(hb-param-margin-gene-screen)"/>
+                    <stretchitem stretchfactor="1"/>
+                    <linearitem itemname="noitemslabel"/>
+                    <stretchitem stretchfactor="1"/>
+                </layout>
+            </widget>          
+            <layout type="stacked">
+                <stackitem itemname="noitemswidget"/>
+                <stackitem itemname="taskgrid"/>
+            </layout>
+        </widget>            
+        <bool name="backgroundFaded" value="TRUE"/>
+        <string name="dismissPolicy" value="TapOutside"/>
+        <string name="frameType" value="Weak"/>        
+        <integer name="timeout" value="0"/>
+        <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+    </widget>
+    <section name="portrait">
+        <widget name="tsdevicedialog">
+            <sizehint type="PREFERRED" width="48un" height="40un"/>
+        </widget>
+    </section>
+    <section name="landscape">
+        <widget name="tsdevicedialog">
+            <sizehint type="PREFERRED" width="60un" height="40un"/>
+        </widget>
+    </section>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/resource/tstasksgriditem.css	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,53 @@
+TsTasksGridItem {
+    layout:custom;
+}
+
+TsTasksGridItem::appname {
+    text-align: center;
+    color: var(qtc_default_main_pane_normal);
+    font-variant: secondary;
+    text-height: var(hb-param-text-height-tiny);
+    text-wrap-mode: no-wrap;    
+}
+
+TsTasksGridItem > HbPushButton#closebadge {
+    min-width: 7un;
+    min-height: 7un;
+}
+
+TsTasksGridItem::screenshotFrame {
+    zvalue: -1;
+}
+
+TsTasksGridItem > HbPushButton#closebadge::toucharea {
+    left: 1un;
+    right: -1un;
+    top: 1un;
+    bottom: -1un;
+}
+
+TsTasksGridItem > HbPushButton#closebadge::icon {
+    max-width: var(hb-param-graphic-size-primary-small);
+    max-height: var(hb-param-graphic-size-primary-small);
+}
+
+TsTasksGridItem::screenshot {
+    alignment: center;
+}
+
+TsTasksGridItem::activeLabel  {
+    text-align: center;
+    color: var(qtc_multimedia_trans_normal);
+    text-height: var(hb-param-text-height-tiny);
+    font-variant: secondary;
+    
+    zvalue: 2;
+    
+    /* workaround for mesh layout limitations */
+    max-height: 4un;
+    min-height: 4un;
+}
+
+TsTasksGridItem::activeLabelFrame {
+    zvalue: 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/resource/tstasksgriditem.widgetml	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,29 @@
+<hbwidget version="0.1" type="TsTasksGridItem">
+    <layout name="custom" type="mesh">
+        <meshitem src="appname" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-4un"/>
+        <meshitem src="appname" srcEdge="LEFT" dst="screenshotFrame" dstEdge="LEFT"/>
+        <meshitem src="appname" srcEdge="RIGHT" dst="screenshotFrame" dstEdge="RIGHT"/>
+
+        <meshitem src="screenshot" srcEdge="TOP" dst="appname" dstEdge="BOTTOM" spacing="-1.5un"/>
+        <meshitem src="screenshot" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="1.5un"/>
+        <meshitem src="screenshot" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-1.5un"/>
+        <meshitem src="screenshot" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="4un"/>
+        
+        <meshitem src="screenshotFrame" srcEdge="TOP" dst="screenshot" dstEdge="TOP" spacing="0.25un"/>
+        <meshitem src="screenshotFrame" srcEdge="RIGHT" dst="screenshot" dstEdge="RIGHT" spacing="-0.25un"/>
+        <meshitem src="screenshotFrame" srcEdge="LEFT" dst="screenshot" dstEdge="LEFT" spacing="0.25un"/>
+        <meshitem src="screenshotFrame" srcEdge="BOTTOM" dst="screenshot" dstEdge="BOTTOM" spacing="-0.25un"/>
+
+        <meshitem src="closebadge" srcEdge="TOP" dst="screenshot" dstEdge="TOP"/>
+        <meshitem src="closebadge" srcEdge="RIGHT" dst="screenshot" dstEdge="RIGHT"/>
+        
+        <meshitem src="activeLabel" srcEdge="RIGHT" dst="screenshotFrame" dstEdge="RIGHT"/>
+        <meshitem src="activeLabel" srcEdge="LEFT" dst="screenshotFrame" dstEdge="LEFT"/>
+        <meshitem src="activeLabel" srcEdge="BOTTOM" dst="screenshotFrame" dstEdge="BOTTOM"/>
+        
+        <meshitem src="activeLabelFrame" srcEdge="TOP" dst="activeLabel" dstEdge="TOP"/>
+        <meshitem src="activeLabelFrame" srcEdge="RIGHT" dst="activeLabel" dstEdge="RIGHT"/>
+        <meshitem src="activeLabelFrame" srcEdge="LEFT" dst="activeLabel" dstEdge="LEFT"/>
+        <meshitem src="activeLabelFrame" srcEdge="BOTTOM" dst="activeLabel" dstEdge="BOTTOM"/>        
+    </layout>
+</hbwidget>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tsdevicedialogcontainer.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,196 @@
+/*
+* 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 "tsdevicedialogcontainer.h"
+
+#include <QAbstractListModel>
+
+#include <HbDialog>
+#include <HbMainWindow>
+#include <HbLabel>
+#include <HbFrameDrawer>
+#include <HbFrameItem>
+#include <HbStyleLoader>
+
+#include <tspropertydefs.h>
+
+#include "tstasksgrid.h"
+#include "tstasksgriditem.h"
+
+namespace
+{
+    const char KDocmlPath[] = ":/resource/layout.docml";
+}
+
+TsDeviceDialogContainer::TsDeviceDialogContainer(QAbstractListModel *model,
+                                                 QObject *parent)
+    :
+    QObject(parent),
+    mVisibilityPublisher(TsProperty::KTsPath),
+    mDismissRequestSubscriber(QString("%1/%2").arg(TsProperty::KTsPath).arg(TsProperty::KDismissRequestPath))
+{
+    bool ok(true);
+    mLoader.load(KDocmlPath, &ok);
+    Q_ASSERT(ok);
+
+    HbDialog *dialog =
+        qobject_cast<HbDialog *>(mLoader.findWidget("tsdevicedialog"));
+    TsTasksGrid *grid =
+        qobject_cast<TsTasksGrid *>(mLoader.findWidget("taskgrid"));
+    Q_ASSERT(dialog);
+    Q_ASSERT(grid);
+    
+    bool cssLoaded = HbStyleLoader::registerFilePath(":/resource/hbdialog.css");
+    Q_ASSERT(cssLoaded);
+    {
+        HbLabel *dialogHeading = qobject_cast<HbLabel *>(dialog->headingWidget());
+        Q_ASSERT(dialogHeading);
+        HbFrameDrawer *headingFrame = new HbFrameDrawer(QLatin1String("qtg_fr_popup_heading"), HbFrameDrawer::ThreePiecesHorizontal);
+        dialogHeading->setBackgroundItem(new HbFrameItem(headingFrame));
+    }
+
+    grid->setEnabledAnimations(HbAbstractItemView::None);
+    grid->setModel(model);
+
+    changeOrientation(dialog->mainWindow()->orientation());
+    switchViewOnModelChange();
+
+    // needed because of Qt::QueuedConnection used below
+    // @todo: check if we actually need queued connections
+    qRegisterMetaType<QModelIndex>("QModelIndex");
+
+    // connect the grid and model
+    connect(grid,
+            SIGNAL(activated(QModelIndex)),
+            model,
+            SLOT(openApplication(QModelIndex)));
+    connect(grid,
+            SIGNAL(activated(QModelIndex)),
+            dialog,
+            SLOT(close()));
+    connect(grid,
+            SIGNAL(deleteButtonClicked(QModelIndex)),
+            model, SLOT(closeApplication(QModelIndex)),
+            Qt::QueuedConnection);
+
+    connect(dialog->mainWindow(),
+            SIGNAL(orientationChanged(Qt::Orientation)),
+            this,
+            SLOT(changeOrientation(Qt::Orientation)));
+    connect(dialog,
+            SIGNAL(aboutToClose()),
+            this,
+            SIGNAL(deviceDialogClosed()));
+
+    // switch between grid and "no items" label when model is updated
+    connect(model, SIGNAL(modelReset()), this, SLOT(switchViewOnModelChange()));
+    connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(switchViewOnModelChange()));
+    connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(switchViewOnModelChange()));
+
+    connect(this,
+            SIGNAL(deviceDialogClosed()),
+            this,
+            SLOT(notifyDialogClosed()));
+    mVisibilityPublisher.setValue(TsProperty::KVisibilityPath,
+                                  static_cast<int>(true));
+    mVisibilityPublisher.sync();
+
+    connect(&mDismissRequestSubscriber,
+            SIGNAL(contentsChanged()),
+            this,
+            SLOT(handleDismissRequest()));
+}
+
+TsDeviceDialogContainer::~TsDeviceDialogContainer()
+{
+    delete deviceDialogWidget();
+}
+
+bool TsDeviceDialogContainer::setDeviceDialogParameters(
+    const QVariantMap &parameters)
+{
+    Q_UNUSED(parameters);
+    return false;
+}
+
+int TsDeviceDialogContainer::deviceDialogError() const
+{
+    return 0;
+}
+
+void TsDeviceDialogContainer::closeDeviceDialog(bool byClient)
+{
+    Q_UNUSED(byClient)
+    // @todo: should there be hide calls? deviceDialogWidget->hide();
+    emit deviceDialogClosed();
+}
+
+HbPopup *TsDeviceDialogContainer::deviceDialogWidget() const
+{
+    HbDialog *widget =
+        qobject_cast<HbDialog *>(mLoader.findWidget("tsdevicedialog"));
+    Q_ASSERT(widget);
+    return widget;
+}
+
+QObject *TsDeviceDialogContainer::signalSender() const
+{
+    return const_cast<TsDeviceDialogContainer *>(this);
+}
+
+void TsDeviceDialogContainer::changeOrientation(Qt::Orientation orientation)
+{
+    bool ok(true);
+    if (orientation == Qt::Horizontal) {
+        mLoader.load(KDocmlPath, "landscape", &ok);
+    } else {
+        mLoader.load(KDocmlPath, "portrait", &ok);
+    }
+    Q_ASSERT(ok);
+}
+
+void TsDeviceDialogContainer::notifyDialogClosed()
+{
+    mVisibilityPublisher.setValue(TsProperty::KVisibilityPath,
+                                  static_cast<int>(false));
+    mVisibilityPublisher.sync();
+}
+
+void TsDeviceDialogContainer::switchViewOnModelChange()
+{
+    TsTasksGrid *grid =
+        qobject_cast<TsTasksGrid *>(mLoader.findWidget("taskgrid"));
+    HbWidget *noItemsWidget =
+        qobject_cast<HbWidget *>(mLoader.findWidget("noitemswidget"));
+    Q_ASSERT(grid);
+    Q_ASSERT(noItemsWidget);
+
+    if (grid->model() && grid->model()->rowCount()) {
+        noItemsWidget->hide();
+        grid->show();
+    } else {
+        noItemsWidget->show();
+        grid->hide();
+    }
+}
+
+void TsDeviceDialogContainer::handleDismissRequest()
+{
+    if (mDismissRequestSubscriber.value().toBool()) {
+        emit deviceDialogClosed();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tsdevicedialogplugin.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,193 @@
+/*
+* 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 "tsdevicedialogplugin.h"
+
+#include <QTranslator>
+#include <QCoreApplication>
+#include <QLocale>
+#include <QtPlugin>
+
+#include <QValueSpacePublisher>
+
+#include <HbDeviceDialog>
+#include <HbMainWindow>
+
+#include <tspropertydefs.h>
+
+#include "tsdevicedialogcontainer.h"
+#include "tstasksgrid.h"
+#include "tstasksgriditem.h"
+#include "tsdocumentloader.h"
+#include "tsmodel.h"
+
+QTM_USE_NAMESPACE
+
+/*!
+    \class TsDeviceDialogPlugin
+    \ingroup group_tsdevicedialogplugin
+    \brief TaskSwitcher Device Dialog Plug-in.
+ */
+
+namespace
+{
+    const char KTranslationPath[] = "resource/qt/translations";
+    const char KTsDialogType[] = "com.nokia.taskswitcher.tsdevicedialogplugin/1.0";
+}
+
+/*!
+    Constructor.
+ */
+TsDeviceDialogPlugin::TsDeviceDialogPlugin()
+    :
+    mModel(0),
+    mStorage(0),
+    mTriedToLoadTranslation(false)
+{
+    // ensure the visibility property is set to false, so the TaskSwitcher
+    // in case when hbdevicedialogappserver crashes when TS is visible.
+    QValueSpacePublisher visibilityPublisher(TsProperty::KTsPath);
+    visibilityPublisher.setValue(TsProperty::KVisibilityPath, static_cast<int>(false));
+    visibilityPublisher.sync();
+}
+
+TsDeviceDialogPlugin::~TsDeviceDialogPlugin()
+{
+}
+/*!
+    \reimp
+ */
+bool TsDeviceDialogPlugin::accessAllowed(const QString &deviceDialogType,
+                                         const QVariantMap &parameters,
+                                         const QVariantMap &securityInfo) const
+{
+    Q_UNUSED(deviceDialogType)
+    Q_UNUSED(parameters)
+    Q_UNUSED(securityInfo)
+
+    // This plugin doesn't perform operations that may compromise security.
+    // All clients are allowed to use it.
+    return true;
+}
+
+/*!
+    \reimp
+ */
+HbDeviceDialogInterface *
+TsDeviceDialogPlugin::createDeviceDialog(const QString &deviceDialogType,
+                                         const QVariantMap &parameters)
+{
+    Q_UNUSED(parameters)
+    HbDeviceDialogInterface *dialogInterface(0);
+    if (deviceDialogType == QString(KTsDialogType)) {
+        // lazy loading of translation
+        if (!mTriedToLoadTranslation) {
+            mTriedToLoadTranslation = true;
+
+            QTranslator *translator = new QTranslator(this);
+            QString translationFile =
+                QString("taskswitcher_%1").arg(QLocale::system().name());
+
+            bool translationLoaded(false);
+#ifdef Q_OS_SYMBIAN
+            translationLoaded =
+                translator->load(translationFile,
+                                 QString("z:/") + KTranslationPath);
+            if (!translationLoaded) {
+                translationLoaded =
+                    translator->load(translationFile,
+                                     QString("c:/") + KTranslationPath);
+            }
+#else
+            translationLoaded =
+                translator->load(translationFile,
+                                 QString(KTranslationPath));
+#endif //Q_OS_SYMBIAN
+
+            Q_ASSERT(translationLoaded);
+            qApp->installTranslator(translator);
+        }
+
+        // lazy loading of model
+        if (!mModel) {
+            mStorage = new TsTaskMonitor(this);
+            mModel = new TsModel(*mStorage, this);
+        }
+
+        // ensure the dismiss request property is set to false
+
+        QValueSpacePublisher dismissRequestPublisher(TsProperty::KTsPath);
+        dismissRequestPublisher.setValue(TsProperty::KDismissRequestPath, static_cast<int>(false));
+        dismissRequestPublisher.sync();
+
+
+        // create device dialog
+        dialogInterface = new TsDeviceDialogContainer(mModel);
+    }
+    return dialogInterface;
+}
+
+/*!
+    \reimp
+ */
+bool TsDeviceDialogPlugin::deviceDialogInfo(const QString &deviceDialogType,
+                                            const QVariantMap &parameters,
+                                            DeviceDialogInfo *info) const
+{
+    Q_UNUSED(parameters)
+    Q_UNUSED(deviceDialogType)
+
+    info->group = GenericDeviceDialogGroup;
+    info->flags = SingleInstance;
+    info->priority = DefaultPriority;
+
+    return true;
+}
+
+/*!
+    \reimp
+ */
+QStringList TsDeviceDialogPlugin::deviceDialogTypes() const
+{
+    return QStringList(QString(KTsDialogType));
+}
+
+/*!
+    \reimp
+ */
+HbDeviceDialogPlugin::PluginFlags TsDeviceDialogPlugin::pluginFlags() const
+{
+    return PluginFlags(PreloadPlugin | KeepPluginLoaded);
+}
+
+/*!
+    \reimp
+ */
+int TsDeviceDialogPlugin::error() const
+{
+    return 0;
+}
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT
+
+Q_EXPORT_PLUGIN2(tsdevicedialogplugin, TsDeviceDialogPlugin)
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tsdocumentloader.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* 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: Screensaver custom document loader.
+*
+*/
+
+#include "tsdocumentloader.h"
+#include "tstasksgrid.h"
+#include "tstasksgriditem.h"
+
+/*!
+    \class TsDocumentLoader
+    \ingroup group_tsdevicedialogplugin
+    \brief Document loader.
+
+    TS implementation of document loader. It is creating TS objects used in UI
+*/
+
+QObject *TsDocumentLoader::createObject(const QString &type,
+                                        const QString &name)
+{
+    if (type == TsTasksGrid::staticMetaObject.className()) {
+        QObject *object = new TsTasksGrid();
+        object->setObjectName(name);
+        return object;
+    } else if (type == TsTasksGridItem::staticMetaObject.className()) {
+        QObject *object = new TsTasksGridItem();
+        object->setObjectName(name);
+        return object;
+    }
+
+    return HbDocumentLoader::createObject(type, name);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tsmodel.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,216 @@
+/*
+* 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: tsmodel.cpp
+*
+*/
+#include "tsmodel.h"
+
+#include <QVariant>
+#include <QList>
+
+#include <HbIcon>
+
+#include <afstorageglobals.h>
+
+#include "tsmodelitem.h"
+#include "tsdataroles.h"
+#include "tstaskchangeinfo.h"
+
+/*!
+    \class TsModel
+    \ingroup group_tsdevicedialogplugin
+    \brief Model storing running tasks.
+*/
+
+/*!
+    Constructor
+    \param query used to create model
+    \param pointer to parent object
+*/
+TsModel::TsModel(TsTaskMonitor &applicationSrv, QObject *parent) :
+    QAbstractListModel(parent),
+    mEntries(),
+    mApplicationService(applicationSrv)
+{
+    connect(&applicationSrv,
+            SIGNAL(taskListChanged()),
+            this,
+            SLOT(updateApplications()));
+
+    fullUpdate();
+}
+
+/*!
+    Destructor
+*/
+TsModel::~TsModel()
+{
+    qDeleteAll(mEntries);
+}
+
+/*!
+    Returns count of rows in model
+    \retval number of rows
+*/
+int TsModel::rowCount(const QModelIndex &parent) const
+{
+    Q_UNUSED(parent);
+    return mEntries.count();
+}
+
+bool TsModel::insertRows(int row, int count, TsModelItem *item, const QModelIndex &parent)
+{
+    beginInsertRows(parent, row, row+count-1);
+    mEntries.insert(row, item);
+    endInsertRows();
+    return true;
+}
+
+bool TsModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+    TsModelItem *oldItem = mEntries.at(row);
+    beginRemoveRows(parent, row, row + count - 1);
+    mEntries.removeAt(row);
+    delete oldItem;
+    endRemoveRows();
+    return true;
+}
+
+
+bool TsModel::moveRows(int oldPosition, int newPosition, const QModelIndex &parent)
+{
+    beginMoveRows(parent, oldPosition, oldPosition, parent, newPosition);
+    mEntries.move(oldPosition, newPosition);
+    endMoveRows();
+    return true;
+}
+
+
+bool TsModel::updateRows(int row, TsModelItem *item)
+{
+    TsModelItem *oldItem = mEntries.at(row);
+    mEntries[row] = item;
+    delete oldItem;
+
+    emit dataChanged(index(row),index(row));
+    return true;
+}
+
+/*!
+    Returns appropiate model's data
+    \param index model index
+    \param role which data role to return
+    \retval models data
+*/
+QVariant TsModel::data(const QModelIndex &index, int role) const
+{
+    return index.isValid() ? entry(index)->data(role) : QVariant();
+}
+
+/*!
+    Activate one of model entries
+*/
+void TsModel::openApplication(const QModelIndex &index)
+{
+    if (!index.isValid()) {
+        return;
+    }
+    entry(index)->open();
+}
+
+/*!
+    Close one of moder entries
+*/
+void TsModel::closeApplication(const QModelIndex &index)
+{
+    if (!index.isValid() ||
+            !entry(index)->data(TsDataRoles::Closable).toBool()) {
+        return;
+    }
+    entry(index)->close();
+}
+
+/*!
+    Updates model with fresh entries
+*/
+void TsModel::updateApplications()
+{
+    QList<TsTaskChange> changes(mApplicationService.changeList());
+
+    if (changes.count() == 0) {
+        return;
+    }
+    //check 1st item whether we have cancel change - if so reset model
+    if (changes[0].first.changeType() == TsTaskChangeInfo::EChangeCancel) {
+        fullUpdate();
+        return;
+    }
+    for (int iter(0); iter < changes.count(); iter++) {
+        switch (changes[iter].first.changeType()) {
+            case TsTaskChangeInfo::EChangeDelete :
+                removeRows(changes[iter].first.oldOffset(), 1);
+                break;
+            case TsTaskChangeInfo::EChangeInsert :
+                insertRows(changes[iter].first.newOffset(), 1,
+                           new TsModelItem(changes[iter].second));
+                break;
+            case TsTaskChangeInfo::EChangeMove :
+                moveRows(changes[iter].first.oldOffset(), changes[iter].first.newOffset());
+                break;
+            case TsTaskChangeInfo::EChangeUpdate :
+                updateRows(changes[iter].first.oldOffset(),
+                           new TsModelItem(changes[iter].second));
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+/*!
+    reset model
+*/
+void TsModel::fullUpdate()
+{
+    beginResetModel();
+    qDeleteAll(mEntries);
+    mEntries.clear();
+    getApplications();
+    endResetModel();
+
+}
+
+/*!
+    Read list of running applications
+*/
+void TsModel::getApplications()
+{
+    //get all running applications and append to entries list
+    QList<TsTaskChange> tasks(mApplicationService.changeList(true));
+    foreach(TsTaskChange taskData, tasks) {
+        if (!taskData.second.isNull()) {
+            mEntries.append(new TsModelItem(taskData.second));
+        }
+    }
+}
+
+/*!
+    Returns an entry from model
+    \param index of entry in model
+    \retval pointer to an entry
+*/
+TsModelItem *TsModel::entry(const QModelIndex &index) const
+{
+    return mEntries.at(index.row());
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tsmodelitem.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* 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: tsmodelitem.cpp
+*
+*/
+
+#include "tsmodelitem.h"
+
+#include <HbIcon>
+
+#include <tstask.h>
+
+#include "tsdataroles.h"
+
+/*!
+    \class TsModelItem
+    \ingroup group_tsdevicedialogplugin
+    \brief Item presenting running apps in the grid.
+*/
+
+/*!
+    Standard C++ constructor
+    /param entry - Task Monitor data
+*/
+TsModelItem::TsModelItem(QSharedPointer<TsTask> entry)
+    : mEntry(entry)
+{
+    //no implementation required
+}
+
+/*!
+    Standard C++ destructor
+*/
+TsModelItem::~TsModelItem()
+{
+}
+
+/*!
+    Returns the data stored under the given role.
+    /param role - requested data role
+    /return data encapulated by QVariant
+*/
+QVariant TsModelItem::data(int role) const
+{
+    switch (role) {
+        case Qt::DisplayRole:
+            return QVariant(mEntry->name());
+        case Qt::DecorationRole:
+            return QVariant::fromValue<HbIcon>(HbIcon(mEntry->screenshot()));
+        case TsDataRoles::Closable:
+            return QVariant(mEntry->isClosable());
+        case TsDataRoles::Active:
+            return QVariant(mEntry->isActive());
+        default:
+            return QVariant(QVariant::Invalid);
+    }
+}
+
+/*!
+    Close running application repesented by entry
+*/
+void TsModelItem::close()
+{
+    mEntry->close();
+}
+
+/*!
+    Open or move to foreground application repesented by entry
+*/
+void TsModelItem::open()
+{
+    mEntry->open();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tstasksgrid.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "tstasksgrid.h"
+
+void TsTasksGrid::polish(HbStyleParameters &params)
+{
+    HbGridView::polish(params);
+
+    // center second item when dialog is shown
+    if (model()) {
+        scrollTo(model()->index(1, 0), PositionAtCenter);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/src/tstasksgriditem.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,112 @@
+/*
+* 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 "tstasksgriditem.h"
+
+#include <HbPushButton>
+#include <HbAbstractItemView>
+#include <HbFrameItem>
+#include <HbTextItem>
+#include <HbIconItem>
+#include <HbStyleLoader>
+
+#include "tsdataroles.h"
+
+/*!
+    \class TsTasksGridItem
+    \ingroup group_tsdevicedialogplugin
+    \brief Item that should be presented in grid.
+*/
+
+TsTasksGridItem::TsTasksGridItem()
+    :
+    HbAbstractViewItem(),
+    mScreenshotLabel(0),
+    mApplicationNameLabel(0),
+    mDeleteButton(0),
+    mActiveLabelFrame(0),
+    mActiveLabel(0)
+{
+    // Register the custom docml and css to provide our own style to the list items
+    bool widgetmlLoaded =
+        HbStyleLoader::registerFilePath(":/resource/tstasksgriditem.widgetml");
+    Q_ASSERT(widgetmlLoaded);
+    bool cssLoaded =
+        HbStyleLoader::registerFilePath(":/resource/tstasksgriditem.css");
+    Q_ASSERT(cssLoaded);
+}
+
+TsTasksGridItem::TsTasksGridItem(const TsTasksGridItem &item) : HbAbstractViewItem(item)
+{
+    mScreenshotLabel = new HbIconItem(this);
+    mApplicationNameLabel = new HbTextItem(this);
+    mDeleteButton = new HbPushButton(this);
+    HbFrameItem *screenshotFrame = new HbFrameItem(this);
+    screenshotFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+    screenshotFrame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+
+    mActiveLabel = new HbTextItem(hbTrId("txt_ts_label_active"), this);
+    mActiveLabelFrame = new HbFrameItem(this);
+    mActiveLabelFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+    mActiveLabelFrame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
+
+    mDeleteButton->setIcon(HbIcon("qtg_mono_exit"));
+
+    HbStyle::setItemName(mScreenshotLabel, "screenshot");
+    HbStyle::setItemName(mApplicationNameLabel, "appname");
+    HbStyle::setItemName(mDeleteButton, "closebadge");
+    mDeleteButton->setObjectName("closebadge");
+    HbStyle::setItemName(screenshotFrame, "screenshotFrame");
+    HbStyle::setItemName(mActiveLabel, "activeLabel");
+    HbStyle::setItemName(mActiveLabelFrame, "activeLabelFrame");
+    connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(handleDeleteClicked()));
+}
+
+HbAbstractViewItem *TsTasksGridItem::createItem()
+{
+    TsTasksGridItem *newItem = new TsTasksGridItem(*this);
+    connect(newItem, SIGNAL(deleteClicked(QModelIndex)), itemView(), SIGNAL(deleteButtonClicked(QModelIndex)));
+    return newItem;
+}
+
+void TsTasksGridItem::handleDeleteClicked()
+{
+    emit deleteClicked(modelIndex());
+}
+
+void TsTasksGridItem::updateChildItems()
+{
+    mScreenshotLabel->setIcon(modelIndex().data(Qt::DecorationRole).value<HbIcon>());
+    mApplicationNameLabel->setText(modelIndex().data(Qt::DisplayRole).toString());
+
+    QVariant closableData(modelIndex().data(TsDataRoles::Closable));
+    const bool isClosable(closableData.isValid() && closableData.toBool());
+    if (isClosable) {
+        mDeleteButton->show();
+    } else {
+        mDeleteButton->hide();
+    }
+
+    QVariant activeData(modelIndex().data(TsDataRoles::Active));
+    const bool isActive(activeData.isValid() && activeData.toBool());
+    if (isActive) {
+        mActiveLabel->show();
+        mActiveLabelFrame->show();
+    } else {
+        mActiveLabel->hide();
+        mActiveLabelFrame->hide();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/tsdevicedialogplugin.pro	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,70 @@
+#
+# 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: tsdevicedialogplugin.pro
+#
+
+TEMPLATE = lib
+CONFIG += hb plugin mobility
+MOBILITY = publishsubscribe
+
+HEADERS +=  inc/tsdevicedialogcontainer.h \
+            inc/tsdevicedialogplugin.h \
+            inc/tsmodel.h \
+            inc/tsmodelitem.h \
+            inc/tstasksgrid.h \
+            inc/tstasksgriditem.h \
+            inc/tsdocumentloader.h \
+            inc/tsdataroles.h \
+
+SOURCES +=  src/tsdevicedialogcontainer.cpp \
+            src/tsdevicedialogplugin.cpp \
+            src/tsmodel.cpp \
+            src/tsmodelitem.cpp \
+            src/tstasksgrid.cpp \
+            src/tstasksgriditem.cpp \
+            src/tsdocumentloader.cpp \
+
+INCLUDEPATH += . \
+               ./inc \
+               ../../inc \
+
+LIBS +=     -ltstaskmonitorclient
+            
+TRANSLATIONS = taskswitcher.ts
+
+RESOURCES += tsdevicedialogplugin.qrc
+               
+DOCML += resource/layout.docml
+               
+symbian {
+    TARGET.CAPABILITY = CAP_ECOM_PLUGIN
+    TARGET.EPOCALLOWDLLDATA=1
+    TARGET.UID3 = 0x2002677F
+    pluginstub.sources = tsdevicedialogplugin.dll
+    pluginstub.path = /resource/plugins/devicedialogs
+    DEPLOYMENT += pluginstub
+    
+    BLD_INF_RULES.prj_exports += \
+    "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "conf/tsdevicedialog.confml APP_LAYER_CONFML(tsdevicedialog.confml)" \
+    "conf/tsdevicedialog_2002677F.crml APP_LAYER_CRML(tsdevicedialog_2002677F.crml)"
+}
+
+win32 {
+    include ($$[QMAKE_MKSPECS]/features/hb_install.prf)
+    DESTDIR = $$HB_PLUGINS_DIR/devicedialogs
+}
+
+
+symbian:MMP_RULES += SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/tsdevicedialogplugin/tsdevicedialogplugin.qrc	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,8 @@
+<RCC>
+    <qresource prefix="/">
+        <file alias="resource/layout.docml">resource/layout.docml.bin</file>
+        <file>resource/tstasksgriditem.widgetml</file>
+        <file>resource/tstasksgriditem.css</file>        
+        <file>resource/hbdialog.css</file>        
+    </qresource>
+</RCC>
--- a/taskswitcher/utils/inc/tsentry.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/inc/tsentry.h	Wed Oct 06 16:00:22 2010 +0300
@@ -70,8 +70,9 @@
 private:
     CTsEntry(const TTsEntryKey &aKey, MTsDataObserver &observer);
     void ConstructL(QObject* object);
-public:
-    void thumbnailCreated(const CFbsBitmap& aThumbnail);
+
+public://from MTsThumbnailObserver
+    void ThumbnailCreated(const CFbsBitmap& aThumbnail);
 
 private:
     TUid mAppUid;
--- a/taskswitcher/utils/inc/tsidlist.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/inc/tsidlist.h	Wed Oct 06 16:00:22 2010 +0300
@@ -34,6 +34,8 @@
     TInt Size() const;
     void ExternalizeL(RWriteStream &aStream) const;
     void InternalizeL(RReadStream &aStream);
+    TBool operator ==( const CTsIdList& aList) const;
+    TBool operator !=( const CTsIdList& aList) const;
 
 private:
     CTsIdList();
--- a/taskswitcher/utils/inc/tsresourcemanager.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/inc/tsresourcemanager.h	Wed Oct 06 16:00:22 2010 +0300
@@ -17,16 +17,15 @@
 #ifndef TSRESOURCEMANAGER_H
 #define TSRESOURCEMANAGER_H
 
-#include <e32base.h>
-#include <e32event.h>
-#include <w32std.h>
-#include <apgcli.h>
+class RApaLsSession;
+class RWsSession;
+class MTsWindowGroupsMonitor;
 
 /**
- * Interface decalre methods to access initialized OS resources
+ * Interface declare methods to access initialized OS resources
  */
 class MTsResourceManager
-{
+    {
 public:
     /**
      * Access to initialized window server session
@@ -37,46 +36,10 @@
      * Access to initilaized APA session
      */
     virtual RApaLsSession& ApaSession() =0;
-};
-
-/**
- * Resource manager implemetatioin
- */
-class CTsResourceManager: public CBase,
-                          public MTsResourceManager
-{
-public:
-    /**
-     * Two phase constructor
-     */
-    static CTsResourceManager* NewL();
-    
-    /**
-     * Destructor
-     */
-    ~CTsResourceManager();
     
     /**
-     * @see MTsResourceManager::WsSession
-     */
-    RWsSession& WsSession();
-    
-    /**
-     * @see MTsResourceManager::ApaSession
+     * Access to window groups monitor
      */
-    RApaLsSession& ApaSession();
-
-private:
-    /**
-     * Second phase constructor
-     */
-    void ConstructL();
-
-private:
-   RWsSession mWsSession;
-   RApaLsSession mApaSeesion;
-};
-
-
-
+    virtual MTsWindowGroupsMonitor& WsMonitor() =0;
+    };
 #endif // TSRESOURCEMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/utils/inc/tsrunningapp.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,71 @@
+/*
+ * 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 TSRUNNINGAPPLICATION_H
+#define TSRUNNINGAPPLICATION_H
+
+#include <e32base.h>
+
+/**
+ * Abstract interface of container with data to describe running application 
+ */
+class MTsRunningApplication
+    {
+public:
+    /**
+     * Provide access to application unique identifier
+     * @return running application identyfier
+     */
+    virtual TUid UidL()const =0;
+    
+    /**
+     * Provide access to application caption
+     * @return running application caption 
+     */
+    virtual const TDesC& CaptionL() const =0;
+    
+    /**
+     * Provide information if application is hidden from application library
+     * @return EFalse if it's not hidden, other values it is.  
+     */
+    virtual TBool IsHiddenL() const =0;
+    
+    /**
+     * Provide information if application is required by the system and should be closed
+     * @return EFalse if it's not system, other values it is.  
+     */
+    virtual TBool IsSystemL() const =0;
+    
+    /**
+     * Provide access to process window group identifier
+     * @return process window group identyfier
+     */
+    virtual TInt WindowGroupId() const =0;
+    
+    /**
+     * Provide access to "parent" application window group identifier if entry is embeded application
+     * @return parent application window group id
+     */
+    virtual TInt ParentWindowGroupId() const =0;
+    
+    /**
+     * Provide information if application is running embeded-mode
+     * @return EFalse if application isn't embeded, other values it is 
+     */
+    virtual TBool IsEmbeded() const =0;
+
+    };
+#endif //TSRUNNINGAPPLICATION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/utils/inc/tsrunningappstorage.h	Wed Oct 06 16:00:22 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 TSRUNNINGAPPLICATIONSTORAGE_H
+#define TSRUNNINGAPPLICATIONSTORAGE_H
+
+#include <e32base.h>
+class MTsRunningApplication;
+
+/**
+ * Abstract interface of container with running applications desctiptors 
+ */
+class MTsRunningApplicationStorage
+    {
+public:
+    /**
+     * Provide access to running applications
+     * @param aOffset - index of running application
+     * @return running application entry
+     */
+    virtual const MTsRunningApplication& operator[] ( TInt aOffset ) const=0;
+    
+    /**
+     * Provide information about number of running applications
+     * @return number of running applications
+     */
+    virtual TInt Count() const =0;
+    
+    /**
+     * @param aRunningApp embeded application entry
+     * @return index of parent of embeded application
+     */
+    virtual TInt ParentIndex( const MTsRunningApplication& aRunningApp ) const =0;
+    
+    /**
+     * Provide access to windows groups that were blocked( servers, applications without UI )
+     * @return list of blocked window groups
+     */
+    virtual TArray<TInt> BlockedWindowGroups() const =0;
+
+    };
+
+#endif //TSRUNNINGAPPLICATIONSTORAGE_H
--- a/taskswitcher/utils/inc/tsthumbnailobserver.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/inc/tsthumbnailobserver.h	Wed Oct 06 16:00:22 2010 +0300
@@ -20,9 +20,12 @@
 
 class CFbsBitmap;
 class MTsThumbnailObserver
-{
+    {
 public:
-    virtual void thumbnailCreated(const CFbsBitmap& aThumbnail) =0;
-    
-};
+    /**
+     * 
+     */
+    virtual void ThumbnailCreated(const CFbsBitmap& aThumbnail) =0;
+
+    };
 #endif //TSTHUMBNAILOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/utils/inc/tswindowgroupsmonitor.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies 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 TSWINDOWGROUPSMONITOR_H
+#define TSWINDOWGROUPSMONITOR_H
+
+#include "tswindowgroupsobserver.h"
+
+/**
+ * Interface declare methods to subscribe window server events
+ */
+class MTsWindowGroupsMonitor
+{
+public:
+    /**
+     * Method make subscription for window server events
+     * @param aObserver - events observer
+     */
+    virtual void SubscribeL(MTsWindowGroupsObserver & aObserver) =0;
+    
+    /**
+     * Method cancel subscription for window server events
+     * @param aObserver - events observer
+     */
+    virtual void Cancel(MTsWindowGroupsObserver & aObserver) =0;
+};
+
+#endif //TSWINDOWGROUPSMONITOR_H
--- a/taskswitcher/utils/inc/tswindowgroupsobserver.h	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/inc/tswindowgroupsobserver.h	Wed Oct 06 16:00:22 2010 +0300
@@ -17,95 +17,22 @@
 #ifndef TSWINDOWGROUPSOBSERVER_H
 #define TSWINDOWGROUPSOBSERVER_H
 
-#include "tsresourcemanager.h"
-
-class MTsRunningApplication
-    {
-public:
-    virtual TUid UidL()const =0;
-    virtual const TDesC& CaptionL() const =0;
-    virtual TBool IsHiddenL() const =0;
-    virtual TBool IsSystemL() const =0;
-    virtual TInt WindowGroupId() const =0;
-    virtual TInt ParentWindowGroupId() const =0;
-    virtual TBool IsEmbeded() const =0;
-    
-
-    };
-
-class MTsRunningApplicationStorage
-    {
-public:
-    virtual const MTsRunningApplication& operator[] (TInt aOffset) const=0;
-    virtual TInt Count() const =0;
-    virtual TInt ParentIndex( const MTsRunningApplication& aRaunningApp ) const =0;
-    virtual TArray<TInt> BlockedWindowGroups() const =0;
-
-    };
-
+class MTsResourceManager;
+class MTsRunningApplicationStorage;
 /**
  * Interface declare mathods to notify about window server events
  */
 class MTsWindowGroupsObserver
-{
+    {
 public:
     /**
      * Method notify about window group changes.
      * @param aResources - resource manager
      * @param aStorage - list of running applications
      */
-    virtual void HandleWindowGroupChanged(MTsResourceManager &aResources, 
-                                          const MTsRunningApplicationStorage& aStorage) =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
-     */
-    ~CTsWindowGroupsObserver();
-    
-protected:
-    /**
-     * First phase constructor
-     */
-    CTsWindowGroupsObserver(MTsWindowGroupsMonitor &);
-    
-    /**
-     * Second phase constructor.
-     * Function automaticly subscribe window server events
-     */
-    void BaseConstructL();
-
-private:
-    MTsWindowGroupsMonitor & mMonitor;
-};
+    virtual void HandleWindowGroupChanged(
+                              MTsResourceManager& aResources, 
+                              const MTsRunningApplicationStorage& aStorage) =0;
+    };
 
 #endif //TSWINDOWGROUPSOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/utils/inc/tswindowgroupsobserverbase.h	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,45 @@
+/*
+ * 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 TSWINDOWGROUPSOBSERVERBASE_H
+#define TSWINDOWGROUPSOBSERVERBASE_H
+
+#include <e32base.h>
+
+#include "tswindowgroupsobserver.h"
+#include "tswindowgroupsmonitor.h"
+
+/**
+ * Window server observer implementation. Class automaticly subscribe / cancel subscription
+ * at construction / destruction level.
+ * 
+ */
+class CTsWindowGroupsObserverBase: public CBase,
+                                   public MTsWindowGroupsObserver
+    {
+public:
+    ~CTsWindowGroupsObserverBase();
+
+protected:
+    CTsWindowGroupsObserverBase( MTsWindowGroupsMonitor & aMonitor);
+    void BaseConstructL();
+
+private:
+    MTsWindowGroupsMonitor & iMonitor;
+
+    };
+
+#endif //TSWINDOWGROUPSOBSERVERBASE_H
--- a/taskswitcher/utils/src/tsentry.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/src/tsentry.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -265,15 +265,16 @@
 }
 
 // --------------------------------------------------------------------------
-// CTsFswEntry::thumbnailCreated
-// --------------------------------------------------------------------------
-//
-void CTsEntry::thumbnailCreated(const CFbsBitmap& aThumbnail)
-{
+/**
+ * Interface implementation
+ * @see MTsThumbnailObserver::ThumbnailCreated( const CFbsBitmap& )
+ */
+void CTsEntry::ThumbnailCreated(const CFbsBitmap& aThumbnail)
+    {
     mScreenshot->Reset();
     mScreenshot->Duplicate(aThumbnail.Handle());
     RefreshUpdateTimestamp();
     mObserver.DataChanged();
-}
+    }
 
 // end of file
--- a/taskswitcher/utils/src/tsentrykeygenerator.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/src/tsentrykeygenerator.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -15,6 +15,8 @@
  *
 */
 #include "tsentrykeygenerator.h"
+#include "tsrunningapp.h"
+#include "tsrunningappstorage.h"
 
 // -----------------------------------------------------------------------------
 //
--- a/taskswitcher/utils/src/tsidlist.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/src/tsidlist.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -118,3 +118,18 @@
         }
     }
 
+//------------------------------------------------------------------------------
+TBool CTsIdList::operator ==( const CTsIdList& aList) const
+    {
+    TBool retVal(aList.iIds.Count() == iIds.Count());
+    for( TInt offset(0); retVal && offset < iIds.Count(); ++offset )
+        {
+        retVal = (KErrNotFound != aList.iIds.Find(iIds[offset]));
+        }
+    return retVal;
+    }
+//------------------------------------------------------------------------------
+TBool CTsIdList::operator !=( const CTsIdList& aList) const
+    {
+    return !(*this ==aList);
+    }
--- a/taskswitcher/utils/src/tsresourcemanager.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +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 "tswindowgroupsobserver.h"
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-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());
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CTsResourceManager::~CTsResourceManager()
-{
-    mApaSeesion.Close();
-    mWsSession.Close();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-RWsSession& CTsResourceManager::WsSession()
-{
-    return mWsSession;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-RApaLsSession& CTsResourceManager::ApaSession()
-{
-    return mApaSeesion;
-}
--- a/taskswitcher/utils/src/tsthumbnailprovider.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ b/taskswitcher/utils/src/tsthumbnailprovider.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -17,6 +17,11 @@
 #include <fbs.h>
 #include "tsthumbnailprovider.h"
 //------------------------------------------------------------------------------
+/**
+ * Constructor - initialize provider instance
+ * @param observer - thumnail observer
+ * @param obj - object which request and receive new thumnails using signal/slot interface
+ */
 TsThumbnailProvider::TsThumbnailProvider(MTsThumbnailObserver& observer, QObject* obj)
 :
     mObserver(observer)
@@ -32,6 +37,9 @@
             SLOT(thumbnailCreated(QPixmap, const void*)));
 }
 //------------------------------------------------------------------------------
+/**
+ * Function create interface for Symbian clients.
+ */
 void TsThumbnailProvider::createThumbnail(CFbsBitmap& source, int angle)
 {
     emit createThumbnail(QPixmap::fromSymbianCFbsBitmap(&source), 
@@ -40,6 +48,9 @@
 }
 
 //------------------------------------------------------------------------------
+/**
+ * Retrieve requests done by Symbian interface and forward results to observer
+ */
 void TsThumbnailProvider::thumbnailCreated(const QPixmap& thumbnail,
                                            const void *userData)
 {
@@ -48,7 +59,7 @@
     }
     CFbsBitmap *bitmap(thumbnail.toSymbianCFbsBitmap());
     if(0 != bitmap) {
-        mObserver.thumbnailCreated(*bitmap);
+        mObserver.ThumbnailCreated(*bitmap);
     }
     delete bitmap;
 }
--- a/taskswitcher/utils/src/tswindowgroupsobserver.cpp	Mon Sep 27 11:31:59 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 :
- *
- */
-#include "tswindowgroupsobserver.h"
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CTsWindowGroupsObserver::CTsWindowGroupsObserver(MTsWindowGroupsMonitor & monitor)
-:
-    mMonitor(monitor)
-{}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CTsWindowGroupsObserver::BaseConstructL()
-{
-    mMonitor.SubscribeL(*this);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CTsWindowGroupsObserver::~CTsWindowGroupsObserver()
-{
-    mMonitor.Cancel(*this);
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/utils/src/tswindowgroupsobserverbase.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,47 @@
+/*
+ * 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 "tswindowgroupsobserverbase.h"
+
+// -----------------------------------------------------------------------------
+/**
+ * First phase constructor
+ */
+CTsWindowGroupsObserverBase::CTsWindowGroupsObserverBase(
+                                              MTsWindowGroupsMonitor & aMonitor)
+:
+    iMonitor(aMonitor)
+{}
+
+// -----------------------------------------------------------------------------
+/**
+ * Second phase constructor.
+ * Function automaticly subscribe window server events
+ */
+void CTsWindowGroupsObserverBase::BaseConstructL()
+{
+    iMonitor.SubscribeL(*this);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor
+ * Function automaticly cancel subscrption to window server events
+ */
+CTsWindowGroupsObserverBase::~CTsWindowGroupsObserverBase()
+{
+    iMonitor.Cancel(*this);
+}
--- a/tsdevicedialog/common.pri	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +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: taskswitcherapp project - common QMake settings
-#
-
-CONFIG += debug_and_release
-
-# On win32 and mac, debug and release libraries are named differently.
-# We must follow the debug and release settings Qt was compiled with:
-# build debug iff Qt built debug, build release iff Qt built release.
-win32|mac {
-    !contains(QT_CONFIG,debug)|!contains(QT_CONFIG,release) {
-        CONFIG -= debug_and_release debug release
-        contains(QT_CONFIG,debug):  CONFIG+=debug
-        contains(QT_CONFIG,release):CONFIG+=release
-    }
-}
-
-CONFIG(debug, debug|release) {
-    SUBDIRPART = debug
-} else {
-    SUBDIRPART = release
-}
-
-win32: OUTPUT_DIR = $$PWD/../../bin/$$SUBDIRPART
-symbian: OUTPUT_DIR = $$PWD/bin
-
-#test whether we have a unit test
-!testcase {
-    OBJECTS_DIR = $$OUTPUT_DIR/tmp/$$TARGET
-    DESTDIR = $$OUTPUT_DIR
-    MOC_DIR = $$OUTPUT_DIR/tmp/$$TARGET/moc
-    RCC_DIR = $$OUTPUT_DIR/tmp/$$TARGET/rcc
-    UI_DIR = $$OUTPUT_DIR/tmp/$$TARGET/ui
-} else { # test part is NOT DONE
-    QT *= testlib
-    CONFIG += console
-    CONFIG -= app_bundle
-    OBJECTS_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET
-    DESTDIR = $$OUTPUT_DIR
-    MOC_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET/moc
-    RCC_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET/rcc
-    UI_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET/ui
-    coverage {
-        DEFINES += COVERAGE_MEASUREMENT
-        DEFINES += QT_NO_DEBUG  # omit ASSERTS in coverage measurements
-    }    
-}
-
-# Add the output dirs to the link path too
-LIBS += -L$$DESTDIR
-
-#For some reason the default include path doesn't include MOC_DIR on symbian
-symbian {
-    INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-    INCLUDEPATH += $$MOC_DIR
-    TARGET.CAPABILITY = ALL -TCB
-    TARGET.EPOCALLOWDLLDATA=1
-}
-
-win32 {
-    # add platfrom API for windows
-    INCLUDEPATH += \
-                $$PWD/../../homescreensrv/homescreensrv_plat/contentstorage_api
-}
--- a/tsdevicedialog/rom.pri	Mon Sep 27 11:31:59 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:
-#
-
-BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"
-BLD_INF_RULES.prj_exports += "rom/tsdevicedialog_core.iby  CORE_APP_LAYER_IBY_EXPORT_PATH(tsdevicedialog_core.iby)"
-BLD_INF_RULES.prj_exports += "rom/tsdevicedialog_resources.iby  LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(tsdevicedialog_resources.iby)"
-BLD_INF_RULES.prj_exports += "./sis/stubs/taskswitcher_stub.sis  /epoc32/release/winscw/udeb/z/system/install/taskswitcher_stub.sis"
-BLD_INF_RULES.prj_exports += "./sis/stubs/taskswitcher_stub.sis  /epoc32/data/z/system/install/taskswitcher_stub.sis"
\ No newline at end of file
--- a/tsdevicedialog/rom/tsdevicedialog_core.iby	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +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 __TSDEVICEDIALOG_CORE_IBY__
-#define __TSDEVICEDIALOG_CORE_IBY__
-
-file=ABI_DIR\BUILD_DIR\tsdevicedialogplugin.dll					       SHARED_LIB_DIR\tsdevicedialogplugin.dll
-data=\epoc32\data\z\resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin    resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin
-
-// stub sis
-data=ZSYSTEM/install/taskswitcher_stub.sis                  system/install/taskswitcher_stub.sis
-
-// qcrml
-data=\epoc32\data\z\resource\qt\crml\tsdevicedialog.qcrml   resource\qt\crml\tsdevicedialog.qcrml
-
-#endif //__TSAPP_CORE_IBY__
--- a/tsdevicedialog/rom/tsdevicedialog_resources.iby	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +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 __TSDEVICEDIALOG_LANGUAGE_IBY__
-#define __TSDEVICEDIALOG_LANGUAGE_IBY__
-
-// -------- hsapplication
-data=DATAZ_\resource\qt\translations\taskswitcher.qm resource\qt\translations\taskswitcher.qm 
-
-#endif //__TSAPP_LANGUAGE_IBY__
--- a/tsdevicedialog/sis/buildSis.cmd	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description:
-@rem
-@echo off
-setlocal EnableDelayedExpansion
-set openpar=(
-set closepar=)
-
-if exist *.sis* ( del *.sis* )
-if exist tmp.pkg ( del tmp.pkg )
-
-copy /Y taskswitcher.pkg tmp.pkg > NUL
-
-echo Creating sis for each component:
-for /R .. %%i IN (*_template.pkg) DO set tmpname=%%~ni && set modulename=!tmpname:~0,-10!&& call createpackage %%i release-armv5 cert.cer key.pem > NUL && set sisname=%%~dpi!modulename!_release-armv5.sis && if exist !sisname! ( echo [SUCCEEDED] !modulename! [SUCCEEDED] && move !sisname! . && FOR /F "eol=( tokens=4 delims=({}" %%j IN (%%i) DO FOR /F "tokens=1 delims=)" %%k IN ("%%j") DO echo @"!modulename!_release-armv5.sis",!openpar!%%k!closepar! >> tmp.pkg ) else ( echo [FAILED] !modulename! [FAILED] )
-
-REM echo.
-
-echo Embedding all sis files into single sis
-makesis tmp.pkg taskswitcher.sis >NUL
-signsis taskswitcher.sis taskswitcher.sisx cert.cer key.pem >NUL
-
-echo Cleaning up
-del tmp.pkg
-del taskswitcher.sis
-del *_release-armv5.sis*
-pause
--- a/tsdevicedialog/sis/edit_pkg.pl	Mon Sep 27 11:31:59 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: 
-#
-#Options:
-# -version  -adds Qt version (4,6,0) intp pkg files
-# -target  -replaces $(PLATFORM)/$(TARGET) into armv5/urel
-# -module  -creates script for module tests sis
-# -module  -delete module tests pkg
-# default -version
-
-use strict;
-use File::Find;
-my $base = `cd`;
-$base =~ s/\\\w+\s+$//; #move one dir upper 
-my $modulebase = `cd`;
-$modulebase =~s/(\s+)$//; #remove linefeed from end
-print $base;;
-my $qtversion = "\, 4\, 6\, 0\,";
-my $target = "armv5\/urel";
-
-my $qtversionchnage = 0;
-my $qtversionarg = "-version";
-my $targetchnage = 0;
-my $targetarg = "-target";
-my $module = 0;
-my $modulearg = "-module";
-my $delmodule = 0;
-my $delmodulearg = "-delmodule";
-my $moduledir = "modulesis";
-my $modulepath = $base."\\".$moduledir;
-my $ccert = $modulebase."\\"."cert.cer";
-my $ckey = $modulebase."\\"."key.pem";
-my $modulebatpath = $modulebase."\\".$moduledir."\\createmodulesis.bat"; 
-
-checkCmdLine();
-
-if ( $qtversionchnage == 1 || $targetchnage == 1 )
-	{
-	find( \&edits, $base );
-	}
-if ( $module == 1 )
-	{
-	system "mkdir $moduledir";
-	if ( not ( open (FWM, ">$modulebatpath") ) )
-		{
-		print "\n***Error: Couldn't open $modulebatpath file to write\n";
-		return;
-		}
-	binmode FWM;
-	print FWM "del /S/Q *.SIS\r\n";
-	print FWM "del /S/Q *.SISX\r\n";
-	close FWM;	
-	find( \&moduleSis, $base );
-	}	
-if ( $delmodule == 1 )
-	{
-	find( \&delModuleSis, $base );
-	}	
-
-sub edits() 
-	{
-	my $file=$_;
-	my $winpath=$File::Find::name;
-	$winpath=~s/\//\\/g;
-	if( -f $file  && $file=~/(_template\.pkg)$/i ) 
-		{
-		print "$winpath ";
-		system "attrib -R $winpath";
-		if ( not ( open (FR, $winpath) ) )
-			{
-			print "Error: Couldn't open $winpath file to read\n";
-			return;
-			}
-		binmode FR;
-		my $buf="";
-		my $length = 0;
-		$length = -s $winpath;
-		read( FR, $buf, $length );
-		close FR;
-		if ( $qtversionchnage == 1 )
-			{
-			$buf =~s/\,\s*\,\s*\,\s*\,\s*\{\"Qt\"\}/$qtversion \{\"Qt\"\}/si;
-			}
-		if ( $targetchnage == 1 )
-			{
-			$buf =~s/\$\(PLATFORM\)\/\$\(TARGET\)/$target/si;
-			}
-	    
-	    if ( not ( open (FW, ">$winpath") ) )
-			{
-			print "\n***Error: Couldn't open $winpath file to write\n";
-			return;
-			}
-		binmode FW;		
-		print FW $buf;
-	    close FW;		
-		
-		print "\r\n";
-		}
-	}
-
-sub checkCmdLine()
-	{
-	my $numArgs = $#ARGV + 1;
-	if ( $numArgs == 0 )
-		{
-		$qtversionchnage = 1;
-		}
-	else
-		{
-		foreach my $argnum ( 0 .. $#ARGV ) 
-			{
-			my $argName = lc $ARGV[$argnum];
-			if ( $argName eq $qtversionarg )
-				{
-				$qtversionchnage = 1;
-				}
-			elsif ( $argName eq $targetarg )
-				{
-				$targetchnage = 1;
-				}
-			elsif ( $argName eq $modulearg )
-				{
-				$module = 1;
-				}
-			elsif ( $argName eq $delmodulearg )
-				{
-				$delmodule = 1;
-				}
-			else
-				{
-				die "\n***Error: Bad arguments\n";
-				}
-			}
-		}
-	}
-	
-sub moduleSis()
-	{
-	my $file=$_;
-	my $winpath=$File::Find::name;
-	$winpath=~s/\//\\/g;	
-
-	
-	if( -f $file  && $file=~/(_template\.pkg)$/i && ( $file=~/^(t_)/i || $file=~/test/i ) ) 
-		{
-		print "$winpath ";
-		system "attrib -R $winpath";
-		if ( not ( open (FR, $winpath) ) )
-			{
-			print "Error: Couldn't open $winpath file to read\n";
-			return;
-			}
-		binmode FR;
-		my $buf="";
-		my $length = 0;
-		$length = -s $winpath;
-		read( FR, $buf, $length );
-		close FR;
-		$buf =~s/\,\s*\,\s*\,\s*\,\s*\{\"Qt\"\}/$qtversion \{\"Qt\"\}/si;
-		$buf =~s/\$\(PLATFORM\)\/\$\(TARGET\)/$target/si;
-	    
-	    if ( not ( open (FW, ">$winpath") ) )
-			{
-			print "Error: Couldn't open $winpath file to write\n";
-			return;
-			}
-		binmode FW;		
-		print FW $buf;
-	    close FW;				
-		print "\r\n";
-		
-		my $pkgname = sisName( $winpath );
-		
-		if ( not ( open (FWM2, ">>$modulebatpath") ) )
-			{			
-			print "Error: Couldn't open $modulebatpath file to append\n";
-			return;
-			}
-		binmode FWM2;		
-		print FWM2 "makesis $winpath $pkgname\.SIS\r\n";
-		print FWM2 "signsis $pkgname\.SIS $pkgname\.SISX $ccert $ckey\r\n";
-		close FWM2;	
-		}	
-	}
-		
-sub sisName()
-	{
-	my $path = shift;
-	my $name = "";
-	if ( $path =~ /\\(\w+)\.pkg/i )
-		{
-		$name = $1;
-		}
-	return $name;
-	}
-	
-sub delModuleSis()
-	{
-	my $file=$_;
-	my $winpath=$File::Find::name;
-	$winpath=~s/\//\\/g;	
-
-	
-	if( -f $file  && $file=~/(_template\.pkg)$/i && ( $file=~/^(t_)/i || $file=~/test/i ) ) 
-		{
-		print "Deleting: ";
-		print "$winpath ";
-		system "attrib -R $winpath";
-		system "del /S/Q $winpath";
-		print "\r\n";
-		}	
-	}	
\ No newline at end of file
--- a/tsdevicedialog/sis/stubs/createstubs.bat	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description: 
-@rem
-
-for %%f in (*.pkg) do makesis -s %%f
--- a/tsdevicedialog/sis/stubs/taskswitcher_stub.pkg	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +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: 
-;
-; ------------------------------------------------------------------------------
-; Taskswitcher stub SIS package file.
-; Used to enable Taskswitcher to be updated from ROM with a SIS package.
-; When you add new files into this stub, please remember to update
-; SIS stub with "makesis -s" command.
-; ------------------------------------------------------------------------------
-;
-;Language - standard language definitions
-&EN
-
-; standard SIS file header
-#{"taskswitcher"},(0x2002677F),1,0,0,TYPE=SA
-
-;Localized Vendor Name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-""-"Z:\resource\qt\translations\taskswitcher.qm"
-""-"Z:\resource\qt\crml\tsexternalactivation.qcrml"
-
-""-"Z:\sys\bin\tsdevicedialogplugin.dll"
-""-"Z:\resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin"
Binary file tsdevicedialog/sis/stubs/taskswitcher_stub.sis has changed
--- a/tsdevicedialog/sis/taskswitcher.pkg	Mon Sep 27 11:31:59 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: 
-;
-
-;Language - standard language definitions
-&EN
-
-; standard SIS file header
-#{"taskswitcher"},(0x2002677F),1,0,0,TYPE=SA, RU
-
-;Localized Vendor Name
-%{"Nokia"}
-
-;Unique Vendor name
-:"Nokia"
-
-"/epoc32/data/z/resource/qt/translations/taskswitcher.qm"-"!:\resource\qt\translations\taskswitcher.qm"
-"/epoc32/data/z/resource/qt/crml/tsexternalactivation.qcrml"-"!:\resource\qt\crml\tsexternalactivation.qcrml"
-
-"/epoc32/release/armv5/urel/tsdevicedialogplugin.dll"-"!:\sys\bin\tsdevicedialogplugin.dll"
-"/epoc32/data/z/resource/plugins/devicedialogs/tsdevicedialogplugin.qtplugin"-"!:\resource\plugins\devicedialogs\tsdevicedialogplugin.qtplugin"
\ No newline at end of file
--- a/tsdevicedialog/tsdevicedialog.pro	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +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
-
-coverage {
-    SUBDIRS += ../homescreensrv_plat
-    SUBDIRS += ../activityfw
-    SUBDIRS += ../hsappkeyhandler
-    SUBDIRS += ../taskswitcher
-}
-
-SUBDIRS += tsdevicedialogplugin
-
-tests {
-    SUBDIRS += ../internal/tstestutils
-    SUBDIRS += internal/tstestrunner    
-    SUBDIRS += tsdevicedialogplugin/tsrc
-    SUBDIRS += ../activityfw/activityserviceplugin/tsrc
-    SUBDIRS += ../activityfw/storage/client/t_afstorageclient
-    SUBDIRS += ../activityfw/storage/server/tsrc
-    SUBDIRS += ../activityfw/afactivitylauncher/tsrc
-    SUBDIRS += ../hsappkeyhandler/tsrc/t_hsappkeyhandler
-    SUBDIRS += ../taskswitcher/client/tsrc
-    SUBDIRS += ../taskswitcher/server/tsrc
-    SUBDIRS += ../taskswitcher/screenshotplugin/tsrc
-    SUBDIRS += ../taskswitcher/utils/tsrc
-    SUBDIRS += ../taskswitcher/backstepping/tsrc
-}
-
-symbian:include(rom.pri)
-
-CONFIG += ordered
Binary file tsdevicedialog/tsdevicedialogplugin/conf/tsdevicedialog.confml has changed
Binary file tsdevicedialog/tsdevicedialogplugin/conf/tsdevicedialog_2002677F.crml has changed
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsdataroles.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +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 TSDATAROLES_H
-#define TSDATAROLES_H
-
-namespace TsDataRoles
-{
-    enum EntryAttributes {
-        Closable = Qt::UserRole + 1,
-        Active,
-    };
-}
-
-#endif // TSDATAROLES_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsdevicedialogcontainer.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +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 TSDEVICEDIALOGCONTAINER_H
-#define TSDEVICEDIALOGCONTAINER_H
-
-#include <QObject>
-#include <HbDeviceDialogInterface>
-#include <QValueSpacePublisher>
-#include <QValueSpaceSubscriber>
-
-#include "tsdocumentloader.h"
-
-QTM_USE_NAMESPACE
-
-class QAbstractListModel;
-
-class TsDeviceDialogContainer : public QObject,
-                                public HbDeviceDialogInterface
-{
-    Q_OBJECT
-public:
-    explicit TsDeviceDialogContainer(QAbstractListModel *model,
-                                     QObject *parent = 0);
-    ~TsDeviceDialogContainer();
-
-public:
-    virtual bool setDeviceDialogParameters(const QVariantMap &parameters);
-    virtual int deviceDialogError() const;
-    virtual void closeDeviceDialog(bool byClient);
-    virtual HbPopup *deviceDialogWidget() const;
-    virtual QObject *signalSender() const;
-
-signals:
-    void deviceDialogClosed();
-
-public slots:
-    void changeOrientation(Qt::Orientation orientation);
-
-private slots:
-    void notifyDialogClosed();
-    void switchViewOnModelChange();
-    void handleDismissRequest();
-
-private:
-    TsDocumentLoader mLoader;
-    QValueSpacePublisher mVisibilityPublisher;
-    QValueSpaceSubscriber mDismissRequestSubscriber;
-
-    Q_DISABLE_COPY(TsDeviceDialogContainer)
-};
-
-#endif // TSDEVICEDIALOGCONTAINER_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsdevicedialogplugin.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +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 TSDEVICEDIALOGPLUGIN_H
-#define TSDEVICEDIALOGPLUGIN_H
-
-#include <QVariantMap>
-
-#include <HbDeviceDialogPlugin>
-
-#include "tsdocumentloader.h"
-
-class QAbstractListModel;
-class TsTaskMonitor;
-
-class TsDeviceDialogPlugin : public HbDeviceDialogPlugin
-{
-    Q_OBJECT
-
-public:
-    TsDeviceDialogPlugin();
-    ~TsDeviceDialogPlugin();
-
-    bool accessAllowed(const QString &deviceDialogType,
-                       const QVariantMap &parameters,
-                       const QVariantMap &securityInfo) const;
-    HbDeviceDialogInterface *createDeviceDialog(const QString &deviceDialogType,
-                                                const QVariantMap &parameters);
-    bool deviceDialogInfo(const QString &deviceDialogType,
-                          const QVariantMap &parameters,
-                          DeviceDialogInfo *info) const;
-    QStringList deviceDialogTypes() const;
-    PluginFlags pluginFlags() const;
-    int error() const;
-
-private:
-    TsDocumentLoader mLoader;
-    QAbstractListModel *mModel;
-    TsTaskMonitor *mStorage;
-
-    bool mTriedToLoadTranslation;
-
-    Q_DISABLE_COPY(TsDeviceDialogPlugin)
-};
-
-#endif // TSDEVICEDIALOGPLUGIN_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsdocumentloader.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +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: Screensaver custom document loader.
-*
-*/
-
-#ifndef TSDOCUMENTLOADER_H
-#define TSDOCUMENTLOADER_H
-
-#include <HbDocumentLoader>
-
-class TsDocumentLoader : public HbDocumentLoader
-{
-
-private:
-    virtual QObject *createObject(const QString &type,
-                                  const QString &name);
-
-};
-
-#endif // TSDOCUMENTLOADER_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsentrymodelitem.h	Mon Sep 27 11:31:59 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: tsentrymodelitem.h
-*
-*/
-
-#ifndef TSENTRYMODELITEM_H
-#define TSENTRYMODELITEM_H
-
-#include "tsmodelitem.h"
-
-#include <QSharedPointer>
-
-class TsTask;
-
-/*!
-    Class implements model item which represents Content Arsenal entry
-*/
-class TsEntryModelItem : public TsModelItem
-{
-public:
-    TsEntryModelItem(QSharedPointer<TsTask> entry);
-    ~TsEntryModelItem();
-    QVariant data(int role) const;
-    void close();
-    void open();
-
-private:
-    const QSharedPointer<TsTask> mEntry;
-};
-
-#endif // TSMODEL_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsmodel.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +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: tsmodel.h
-*
-*/
-
-#ifndef TSMODEL_H
-#define TSMODEL_H
-
-#include <QAbstractListModel>
-#include <QList>
-#include <QSize>
-#include <QSharedPointer>
-
-#include <tstaskmonitor.h>
-
-class CaNotifier;
-class TsModelItem;
-
-class TsModel : public QAbstractListModel
-{
-    Q_OBJECT
-
-public:
-    TsModel(TsTaskMonitor &applicationSrv,
-            QObject *parent = 0);
-    ~TsModel();
-
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    QVariant data(const QModelIndex &index,
-                  int role = Qt::DisplayRole) const;
-    // from QAbstractModel
-    virtual bool insertRows(int row, int count, TsModelItem *item,
-                            const QModelIndex &parent = QModelIndex());
-    virtual bool removeRows(int row, int count,
-                            const QModelIndex &parent = QModelIndex());
-
-
-    bool moveRows(int oldPosition, int newPosition,
-                  const QModelIndex &parent = QModelIndex());
-    bool updateRows(int row, TsModelItem *item);
-    void fullUpdate();
-
-public slots:
-    void openApplication(const QModelIndex &index);
-    void closeApplication(const QModelIndex &index);
-    void updateApplications();
-    
-private:
-    TsModelItem *entry(const QModelIndex &index) const;
-    void getApplications();
-
-private:
-    /*
-     * List containing result
-     */
-    QList<TsModelItem *> mEntries;
-
-    TsTaskMonitor &mApplicationService;
-
-    Q_DISABLE_COPY(TsModel)
-};
-
-#endif // TSMODEL_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsmodelitem.h	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +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: tsmodelitem.h
-*
-*/
-#ifndef TSMODELITEM_H
-#define TSMODELITEM_H
-
-#include <QVariant>
-#include <QSharedPointer>
-
-#include "tsmodelitem.h"
-
-class TsTask;
-
-/*!
-    Abstract class which define model item for taskswitcher
-*/
-class TsModelItem
-{
-
-public:
-    TsModelItem(QSharedPointer<TsTask> entry);
-    ~TsModelItem();
-    QVariant data(int role) const;
-    void close();
-    void open();
-
-private:
-    const QSharedPointer<TsTask> mEntry;
-    Q_DISABLE_COPY(TsModelItem)
-    
-};
-
-#endif // TSMODELITEM_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tsnoitemslabel.h	Mon Sep 27 11:31:59 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:
-*
-*/
-#ifndef TSNOITEMSLABEL_H
-#define TSNOITEMSLABEL_H
-
-#include <HbLabel>
-
-class TsNoItemsLabel : public HbLabel
-{
-    Q_OBJECT
-
-public:
-    explicit TsNoItemsLabel(QGraphicsItem *parent = 0);
-
-private:
-    Q_DISABLE_COPY(TsNoItemsLabel)
-
-};
-
-#endif //TSNOITEMSLABEL_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tstasksgrid.h	Mon Sep 27 11:31:59 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:
-*
-*/
-#ifndef TSTASKSGRID_H
-#define TSTASKSGRID_H
-
-#include <HbGridView>
-
-class TsTasksGrid : public HbGridView
-{
-    Q_OBJECT
-
-signals:
-    void deleteButtonClicked(const QModelIndex &index);
-
-protected:
-    virtual void polish(HbStyleParameters &params);
-
-};
-
-#endif // TSTASKSGRID_H
--- a/tsdevicedialog/tsdevicedialogplugin/inc/tstasksgriditem.h	Mon Sep 27 11:31:59 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:
-*
-*/
-#ifndef TSTASKSGRIDITEM_H
-#define TSTASKSGRIDITEM_H
-
-#include <HbAbstractViewItem>
-
-class HbTextItem;
-class HbIconItem;
-class HbFrameItem;
-class HbPushButton;
-
-class TsTasksGridItem : public HbAbstractViewItem
-{
-    Q_OBJECT
-
-public:
-    TsTasksGridItem();
-    TsTasksGridItem(const TsTasksGridItem &item);
-
-    HbAbstractViewItem *createItem();
-    void updateChildItems();
-
-private slots:
-    void handleDeleteClicked();
-
-signals:
-    void deleteClicked(const QModelIndex &index);
-
-private:
-    HbIconItem *mScreenshotLabel;
-    HbTextItem *mApplicationNameLabel;
-    HbPushButton *mDeleteButton;
-
-    HbFrameItem *mActiveLabelFrame;
-    HbTextItem *mActiveLabel;
-
-};
-
-#endif //TSTASKSGRIDITEM_H
--- a/tsdevicedialog/tsdevicedialogplugin/resource/hbdialog.css	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-HbDialog#tsdevicedialog::heading {
-    left: 0;
-    right: 0;
-    top: 0;
-    bottom: 0un;
-    fixed-height: expr(var(hb-param-text-height-primary)+2*var(hb-param-margin-gene-popup));
-}
-
-HbDialog#tsdevicedialog::content {
-    left: 0;
-    right: 0;
-    bottom: 0un;
-}
--- a/tsdevicedialog/tsdevicedialogplugin/resource/layout.docml	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.10">
-    <widget name="tsdevicedialog" type="HbDialog">
-        <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
-            <string name="alignment" value="AlignVCenter|AlignHCenter" />
-            <string locid="txt_ts_title_task_switcher" name="plainText" value="Task switcher" />
-        </widget>
-        <widget name="gridContainer" role="HbDialog:contentWidget" type="HbWidget">
-            <widget name="taskgrid" type="TsTasksGrid">
-                <widget name="item" role="HbAbstractView:prototype" type="TsTasksGridItem"/>
-                <bool name="longPressEnabled" value="FALSE"/>
-                <bool name="itemRecycling" value="TRUE"/>
-                <enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
-                <bool name="swapDimensionsOnOrientationChange" value="FALSE"/>
-                <string name="scrollDirections" value="Horizontal"/>
-                <integer name="rowCount" value="1"/>
-                <integer name="columnCount" value="2"/>                
-            </widget>            
-            <widget name="noitemswidget" type="HbWidget">
-                <widget name="noitemslabel" type="TsNoItemsLabel">
-                    <string name="alignment" value="AlignVCenter|AlignHCenter" />
-                    <string locid="txt_ts_info_no_recent_applications" name="plainText"/>
-                    
-                    <fontspec name="fontSpec" role="Primary" textheight="var(hb-param-text-height-primary)"/>
-                    <enums name="textWrapping" value="TextWordWrap"/>                    
-                </widget>   
-                <layout orientation="Vertical" spacing="0.0un" type="linear">
-                    <contentsmargins bottom="var(hb-param-margin-gene-screen)" left="var(hb-param-margin-gene-screen)" right="var(hb-param-margin-gene-screen)" top="var(hb-param-margin-gene-screen)"/>
-                    <stretchitem stretchfactor="1"/>
-                    <linearitem itemname="noitemslabel"/>
-                    <stretchitem stretchfactor="1"/>
-                </layout>
-            </widget>          
-            <layout type="stacked">
-                <stackitem itemname="noitemswidget"/>
-                <stackitem itemname="taskgrid"/>
-            </layout>
-        </widget>            
-        <bool name="backgroundFaded" value="TRUE"/>
-        <string name="dismissPolicy" value="TapOutside"/>
-        <string name="frameType" value="Weak"/>        
-        <integer name="timeout" value="0"/>
-        <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
-    </widget>
-    <section name="portrait">
-        <widget name="tsdevicedialog">
-            <sizehint type="PREFERRED" width="48un" height="40un"/>
-        </widget>
-    </section>
-    <section name="landscape">
-        <widget name="tsdevicedialog">
-            <sizehint type="PREFERRED" width="60un" height="40un"/>
-        </widget>
-    </section>
-</hbdocument>
--- a/tsdevicedialog/tsdevicedialogplugin/resource/tstasksgriditem.css	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-TsTasksGridItem {
-    layout:custom;
-}
-
-TsTasksGridItem::appname {
-    text-align: center;
-    color: var(qtc_default_main_pane_normal);
-    font-variant: secondary;
-    text-height: var(hb-param-text-height-tiny);
-    text-wrap-mode: no-wrap;    
-}
-
-TsTasksGridItem > HbPushButton#closebadge {
-    min-width: 7un;
-    min-height: 7un;
-}
-
-TsTasksGridItem::screenshotFrame {
-    zvalue: -1;
-}
-
-TsTasksGridItem::applicationLabelFrame {
-    zvalue: -1;
-}
-
-TsTasksGridItem > HbPushButton#closebadge::toucharea {
-    left: 1un;
-    right: -1un;
-    top: 1un;
-    bottom: -1un;
-}
-
-TsTasksGridItem > HbPushButton#closebadge::icon {
-    max-width: var(hb-param-graphic-size-primary-small);
-    max-height: var(hb-param-graphic-size-primary-small);
-}
-
-TsTasksGridItem::screenshot {
-    alignment: center;
-}
-
-TsTasksGridItem::activeLabel  {
-    text-align: center;
-    color: var(qtc_multimedia_trans_normal);
-    text-height: var(hb-param-text-height-tiny);
-    font-variant: secondary;
-    
-    zvalue: 2;
-    
-    /* workaround for mesh layout limitations */
-    max-height: 4un;
-    min-height: 4un;
-}
-
-TsTasksGridItem::activeLabelFrame {
-    zvalue: 1;
-}
--- a/tsdevicedialog/tsdevicedialogplugin/resource/tstasksgriditem.widgetml	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-<hbwidget version="0.1" type="TsTasksGridItem">
-    <layout name="custom" type="mesh">
-        <meshitem src="appname" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-4un"/>
-        <meshitem src="appname" srcEdge="LEFT" dst="screenshotFrame" dstEdge="LEFT"/>
-        <meshitem src="appname" srcEdge="RIGHT" dst="screenshotFrame" dstEdge="RIGHT"/>
-
-        <meshitem src="screenshot" srcEdge="TOP" dst="appname" dstEdge="BOTTOM" spacing="-1.5un"/>
-        <meshitem src="screenshot" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="1.5un"/>
-        <meshitem src="screenshot" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-1.5un"/>
-        <meshitem src="screenshot" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="4un"/>
-        
-        <meshitem src="screenshotFrame" srcEdge="TOP" dst="screenshot" dstEdge="TOP" spacing="0.25un"/>
-        <meshitem src="screenshotFrame" srcEdge="RIGHT" dst="screenshot" dstEdge="RIGHT" spacing="-0.25un"/>
-        <meshitem src="screenshotFrame" srcEdge="LEFT" dst="screenshot" dstEdge="LEFT" spacing="0.25un"/>
-        <meshitem src="screenshotFrame" srcEdge="BOTTOM" dst="screenshot" dstEdge="BOTTOM" spacing="-0.25un"/>
-        
-        <meshitem src="applicationLabelFrame" srcEdge="TOP" dst="appname" dstEdge="TOP"/>
-        <meshitem src="applicationLabelFrame" srcEdge="RIGHT" dst="appname" dstEdge="RIGHT"/>
-        <meshitem src="applicationLabelFrame" srcEdge="LEFT" dst="appname" dstEdge="LEFT"/>
-        <meshitem src="applicationLabelFrame" srcEdge="BOTTOM" dst="appname" dstEdge="BOTTOM"/>
-
-        <meshitem src="closebadge" srcEdge="TOP" dst="screenshot" dstEdge="TOP"/>
-        <meshitem src="closebadge" srcEdge="RIGHT" dst="screenshot" dstEdge="RIGHT"/>
-        
-        <meshitem src="activeLabel" srcEdge="RIGHT" dst="screenshotFrame" dstEdge="RIGHT"/>
-        <meshitem src="activeLabel" srcEdge="LEFT" dst="screenshotFrame" dstEdge="LEFT"/>
-        <meshitem src="activeLabel" srcEdge="BOTTOM" dst="screenshotFrame" dstEdge="BOTTOM"/>
-        
-        <meshitem src="activeLabelFrame" srcEdge="TOP" dst="activeLabel" dstEdge="TOP"/>
-        <meshitem src="activeLabelFrame" srcEdge="RIGHT" dst="activeLabel" dstEdge="RIGHT"/>
-        <meshitem src="activeLabelFrame" srcEdge="LEFT" dst="activeLabel" dstEdge="LEFT"/>
-        <meshitem src="activeLabelFrame" srcEdge="BOTTOM" dst="activeLabel" dstEdge="BOTTOM"/>        
-    </layout>
-</hbwidget>
--- a/tsdevicedialog/tsdevicedialogplugin/src/tsdevicedialogcontainer.cpp	Mon Sep 27 11:31:59 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:
-*
-*/
-
-#include "tsdevicedialogcontainer.h"
-
-#include <QAbstractListModel>
-
-#include <HbDialog>
-#include <HbMainWindow>
-#include <HbLabel>
-#include <HbFrameDrawer>
-#include <HbFrameItem>
-#include <HbStyleLoader>
-
-#include <tspropertydefs.h>
-
-#include "tstasksgrid.h"
-#include "tstasksgriditem.h"
-
-namespace
-{
-    const char KDocmlPath[] = ":/resource/layout.docml";
-}
-
-TsDeviceDialogContainer::TsDeviceDialogContainer(QAbstractListModel *model,
-                                                 QObject *parent)
-    :
-    QObject(parent),
-    mVisibilityPublisher(TsProperty::KTsPath),
-    mDismissRequestSubscriber(QString("%1/%2").arg(TsProperty::KTsPath).arg(TsProperty::KDismissRequestPath))
-{
-    bool ok(true);
-    mLoader.load(KDocmlPath, &ok);
-    Q_ASSERT(ok);
-
-    HbDialog *dialog =
-        qobject_cast<HbDialog *>(mLoader.findWidget("tsdevicedialog"));
-    TsTasksGrid *grid =
-        qobject_cast<TsTasksGrid *>(mLoader.findWidget("taskgrid"));
-    Q_ASSERT(dialog);
-    Q_ASSERT(grid);
-    
-    bool cssLoaded = HbStyleLoader::registerFilePath(":/resource/hbdialog.css");
-    Q_ASSERT(cssLoaded);
-    {
-        HbLabel *dialogHeading = qobject_cast<HbLabel *>(dialog->headingWidget());
-        Q_ASSERT(dialogHeading);
-        HbFrameDrawer *headingFrame = new HbFrameDrawer(QLatin1String("qtg_fr_popup_heading"), HbFrameDrawer::ThreePiecesHorizontal);
-        dialogHeading->setBackgroundItem(new HbFrameItem(headingFrame));
-    }
-
-    grid->setEnabledAnimations(HbAbstractItemView::None);
-    grid->setModel(model);
-
-    changeOrientation(dialog->mainWindow()->orientation());
-    switchViewOnModelChange();
-
-    // needed because of Qt::QueuedConnection used below
-    // @todo: check if we actually need queued connections
-    qRegisterMetaType<QModelIndex>("QModelIndex");
-
-    // connect the grid and model
-    connect(grid,
-            SIGNAL(activated(QModelIndex)),
-            model,
-            SLOT(openApplication(QModelIndex)));
-    connect(grid,
-            SIGNAL(activated(QModelIndex)),
-            dialog,
-            SLOT(close()));
-    connect(grid,
-            SIGNAL(deleteButtonClicked(QModelIndex)),
-            model, SLOT(closeApplication(QModelIndex)),
-            Qt::QueuedConnection);
-
-    connect(dialog->mainWindow(),
-            SIGNAL(orientationChanged(Qt::Orientation)),
-            this,
-            SLOT(changeOrientation(Qt::Orientation)));
-    connect(dialog,
-            SIGNAL(aboutToClose()),
-            this,
-            SIGNAL(deviceDialogClosed()));
-
-    // switch between grid and "no items" label when model is updated
-    connect(model, SIGNAL(modelReset()), this, SLOT(switchViewOnModelChange()));
-    connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(switchViewOnModelChange()));
-    connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(switchViewOnModelChange()));
-
-    connect(this,
-            SIGNAL(deviceDialogClosed()),
-            this,
-            SLOT(notifyDialogClosed()));
-    mVisibilityPublisher.setValue(TsProperty::KVisibilityPath,
-                                  static_cast<int>(true));
-    mVisibilityPublisher.sync();
-
-    connect(&mDismissRequestSubscriber,
-            SIGNAL(contentsChanged()),
-            this,
-            SLOT(handleDismissRequest()));
-}
-
-TsDeviceDialogContainer::~TsDeviceDialogContainer()
-{
-    delete deviceDialogWidget();
-}
-
-bool TsDeviceDialogContainer::setDeviceDialogParameters(
-    const QVariantMap &parameters)
-{
-    Q_UNUSED(parameters);
-    return false;
-}
-
-int TsDeviceDialogContainer::deviceDialogError() const
-{
-    return 0;
-}
-
-void TsDeviceDialogContainer::closeDeviceDialog(bool byClient)
-{
-    Q_UNUSED(byClient)
-    // @todo: should there be hide calls? deviceDialogWidget->hide();
-    emit deviceDialogClosed();
-}
-
-HbPopup *TsDeviceDialogContainer::deviceDialogWidget() const
-{
-    HbDialog *widget =
-        qobject_cast<HbDialog *>(mLoader.findWidget("tsdevicedialog"));
-    Q_ASSERT(widget);
-    return widget;
-}
-
-QObject *TsDeviceDialogContainer::signalSender() const
-{
-    return const_cast<TsDeviceDialogContainer *>(this);
-}
-
-void TsDeviceDialogContainer::changeOrientation(Qt::Orientation orientation)
-{
-    bool ok(true);
-    if (orientation == Qt::Horizontal) {
-        mLoader.load(KDocmlPath, "landscape", &ok);
-    } else {
-        mLoader.load(KDocmlPath, "portrait", &ok);
-    }
-    Q_ASSERT(ok);
-}
-
-void TsDeviceDialogContainer::notifyDialogClosed()
-{
-    mVisibilityPublisher.setValue(TsProperty::KVisibilityPath,
-                                  static_cast<int>(false));
-    mVisibilityPublisher.sync();
-}
-
-void TsDeviceDialogContainer::switchViewOnModelChange()
-{
-    TsTasksGrid *grid =
-        qobject_cast<TsTasksGrid *>(mLoader.findWidget("taskgrid"));
-    HbWidget *noItemsWidget =
-        qobject_cast<HbWidget *>(mLoader.findWidget("noitemswidget"));
-    Q_ASSERT(grid);
-    Q_ASSERT(noItemsWidget);
-
-    if (grid->model() && grid->model()->rowCount()) {
-        noItemsWidget->hide();
-        grid->show();
-    } else {
-        noItemsWidget->show();
-        grid->hide();
-    }
-}
-
-void TsDeviceDialogContainer::handleDismissRequest()
-{
-    if (mDismissRequestSubscriber.value().toBool()) {
-        emit deviceDialogClosed();
-    }
-}
--- a/tsdevicedialog/tsdevicedialogplugin/src/tsdevicedialogplugin.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +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 "tsdevicedialogplugin.h"
-
-#include <QTranslator>
-#include <QCoreApplication>
-#include <QLocale>
-#include <QtPlugin>
-
-#include <QValueSpacePublisher>
-
-#include <HbDeviceDialog>
-#include <HbMainWindow>
-
-#include <tspropertydefs.h>
-
-#include "tsdevicedialogcontainer.h"
-#include "tstasksgrid.h"
-#include "tstasksgriditem.h"
-#include "tsdocumentloader.h"
-#include "tsmodel.h"
-
-QTM_USE_NAMESPACE
-
-/*!
-    \class TsDeviceDialogPlugin
-    \ingroup group_tsdevicedialogplugin
-    \brief TaskSwitcher Device Dialog Plug-in.
- */
-
-namespace
-{
-    const char KTranslationPath[] = "resource/qt/translations";
-    const char KTsDialogType[] = "com.nokia.taskswitcher.tsdevicedialogplugin/1.0";
-}
-
-/*!
-    Constructor.
- */
-TsDeviceDialogPlugin::TsDeviceDialogPlugin()
-    :
-    mModel(0),
-    mStorage(0),
-    mTriedToLoadTranslation(false)
-{
-    // ensure the visibility property is set to false, so the TaskSwitcher
-    // in case when hbdevicedialogappserver crashes when TS is visible.
-    QValueSpacePublisher visibilityPublisher(TsProperty::KTsPath);
-    visibilityPublisher.setValue(TsProperty::KVisibilityPath, static_cast<int>(false));
-    visibilityPublisher.sync();
-}
-
-TsDeviceDialogPlugin::~TsDeviceDialogPlugin()
-{
-}
-/*!
-    \reimp
- */
-bool TsDeviceDialogPlugin::accessAllowed(const QString &deviceDialogType,
-                                         const QVariantMap &parameters,
-                                         const QVariantMap &securityInfo) const
-{
-    Q_UNUSED(deviceDialogType)
-    Q_UNUSED(parameters)
-    Q_UNUSED(securityInfo)
-
-    // This plugin doesn't perform operations that may compromise security.
-    // All clients are allowed to use it.
-    return true;
-}
-
-/*!
-    \reimp
- */
-HbDeviceDialogInterface *
-TsDeviceDialogPlugin::createDeviceDialog(const QString &deviceDialogType,
-                                         const QVariantMap &parameters)
-{
-    Q_UNUSED(parameters)
-    HbDeviceDialogInterface *dialogInterface(0);
-    if (deviceDialogType == QString(KTsDialogType)) {
-        // lazy loading of translation
-        if (!mTriedToLoadTranslation) {
-            mTriedToLoadTranslation = true;
-
-            QTranslator *translator = new QTranslator(this);
-            QString translationFile =
-                QString("taskswitcher_%1").arg(QLocale::system().name());
-
-            bool translationLoaded(false);
-#ifdef Q_OS_SYMBIAN
-            translationLoaded =
-                translator->load(translationFile,
-                                 QString("z:/") + KTranslationPath);
-            if (!translationLoaded) {
-                translationLoaded =
-                    translator->load(translationFile,
-                                     QString("c:/") + KTranslationPath);
-            }
-#else
-            translationLoaded =
-                translator->load(translationFile,
-                                 QString(KTranslationPath));
-#endif //Q_OS_SYMBIAN
-
-            Q_ASSERT(translationLoaded);
-            qApp->installTranslator(translator);
-        }
-
-        // lazy loading of model
-        if (!mModel) {
-            mStorage = new TsTaskMonitor(this);
-            mModel = new TsModel(*mStorage, this);
-        }
-
-        // ensure the dismiss request property is set to false
-
-        QValueSpacePublisher dismissRequestPublisher(TsProperty::KTsPath);
-        dismissRequestPublisher.setValue(TsProperty::KDismissRequestPath, static_cast<int>(false));
-        dismissRequestPublisher.sync();
-
-
-        // create device dialog
-        dialogInterface = new TsDeviceDialogContainer(mModel);
-    }
-    return dialogInterface;
-}
-
-/*!
-    \reimp
- */
-bool TsDeviceDialogPlugin::deviceDialogInfo(const QString &deviceDialogType,
-                                            const QVariantMap &parameters,
-                                            DeviceDialogInfo *info) const
-{
-    Q_UNUSED(parameters)
-    Q_UNUSED(deviceDialogType)
-
-    info->group = GenericDeviceDialogGroup;
-    info->flags = SingleInstance;
-    info->priority = DefaultPriority;
-
-    return true;
-}
-
-/*!
-    \reimp
- */
-QStringList TsDeviceDialogPlugin::deviceDialogTypes() const
-{
-    return QStringList(QString(KTsDialogType));
-}
-
-/*!
-    \reimp
- */
-HbDeviceDialogPlugin::PluginFlags TsDeviceDialogPlugin::pluginFlags() const
-{
-    return PluginFlags(PreloadPlugin | KeepPluginLoaded);
-}
-
-/*!
-    \reimp
- */
-int TsDeviceDialogPlugin::error() const
-{
-    return 0;
-}
-
-#ifdef COVERAGE_MEASUREMENT
-#pragma CTC SKIP
-#endif //COVERAGE_MEASUREMENT
-
-Q_EXPORT_PLUGIN2(tsdevicedialogplugin, TsDeviceDialogPlugin)
-
-#ifdef COVERAGE_MEASUREMENT
-#pragma CTC ENDSKIP
-#endif //COVERAGE_MEASUREMENT
--- a/tsdevicedialog/tsdevicedialogplugin/src/tsdocumentloader.cpp	Mon Sep 27 11:31:59 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: Screensaver custom document loader.
-*
-*/
-
-#include "tsdocumentloader.h"
-#include "tstasksgrid.h"
-#include "tstasksgriditem.h"
-#include "tsnoitemslabel.h"
-
-/*!
-    \class TsDocumentLoader
-    \ingroup group_tsdevicedialogplugin
-    \brief Document loader.
-
-    TS implementation of document loader. It is creating TS objects used in UI
-*/
-
-QObject *TsDocumentLoader::createObject(const QString &type,
-                                        const QString &name)
-{
-    if (type == TsTasksGrid::staticMetaObject.className()) {
-        QObject *object = new TsTasksGrid();
-        object->setObjectName(name);
-        return object;
-    } else if (type == TsTasksGridItem::staticMetaObject.className()) {
-        QObject *object = new TsTasksGridItem();
-        object->setObjectName(name);
-        return object;
-    } else if (type == TsNoItemsLabel::staticMetaObject.className()) {
-        QObject *object = new TsNoItemsLabel();
-        object->setObjectName(name);
-        return object;
-    }
-
-    return HbDocumentLoader::createObject(type, name);
-}
--- a/tsdevicedialog/tsdevicedialogplugin/src/tsmodel.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +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: tsmodel.cpp
-*
-*/
-#include "tsmodel.h"
-
-#include <QVariant>
-#include <QList>
-
-#include <HbIcon>
-
-#include <afstorageglobals.h>
-
-#include "tsmodelitem.h"
-#include "tsdataroles.h"
-#include "tstaskchangeinfo.h"
-
-/*!
-    \class TsModel
-    \ingroup group_tsdevicedialogplugin
-    \brief Model storing running tasks.
-*/
-
-/*!
-    Constructor
-    \param query used to create model
-    \param pointer to parent object
-*/
-TsModel::TsModel(TsTaskMonitor &applicationSrv, QObject *parent) :
-    QAbstractListModel(parent),
-    mEntries(),
-    mApplicationService(applicationSrv)
-{
-    connect(&applicationSrv,
-            SIGNAL(taskListChanged()),
-            this,
-            SLOT(updateApplications()));
-
-    fullUpdate();
-}
-
-/*!
-    Destructor
-*/
-TsModel::~TsModel()
-{
-    qDeleteAll(mEntries);
-}
-
-/*!
-    Returns count of rows in model
-    \retval number of rows
-*/
-int TsModel::rowCount(const QModelIndex &parent) const
-{
-    Q_UNUSED(parent);
-    return mEntries.count();
-}
-
-bool TsModel::insertRows(int row, int count, TsModelItem *item, const QModelIndex &parent)
-{
-    beginInsertRows(parent, row, row+count-1);
-    mEntries.insert(row, item);
-    endInsertRows();
-    return true;
-}
-
-bool TsModel::removeRows(int row, int count, const QModelIndex &parent)
-{
-    TsModelItem *oldItem = mEntries.at(row);
-    beginRemoveRows(parent, row, row + count - 1);
-    mEntries.removeAt(row);
-    delete oldItem;
-    endRemoveRows();
-    return true;
-}
-
-
-bool TsModel::moveRows(int oldPosition, int newPosition, const QModelIndex &parent)
-{
-    beginMoveRows(parent, oldPosition, oldPosition, parent, newPosition);
-    mEntries.move(oldPosition, newPosition);
-    endMoveRows();
-    return true;
-}
-
-
-bool TsModel::updateRows(int row, TsModelItem *item)
-{
-    TsModelItem *oldItem = mEntries.at(row);
-    mEntries[row] = item;
-    delete oldItem;
-
-    emit dataChanged(index(row),index(row));
-    return true;
-}
-
-/*!
-    Returns appropiate model's data
-    \param index model index
-    \param role which data role to return
-    \retval models data
-*/
-QVariant TsModel::data(const QModelIndex &index, int role) const
-{
-    return index.isValid() ? entry(index)->data(role) : QVariant();
-}
-
-/*!
-    Activate one of model entries
-*/
-void TsModel::openApplication(const QModelIndex &index)
-{
-    if (!index.isValid()) {
-        return;
-    }
-    entry(index)->open();
-}
-
-/*!
-    Close one of moder entries
-*/
-void TsModel::closeApplication(const QModelIndex &index)
-{
-    if (!index.isValid() ||
-            !entry(index)->data(TsDataRoles::Closable).toBool()) {
-        return;
-    }
-    entry(index)->close();
-}
-
-/*!
-    Updates model with fresh entries
-*/
-void TsModel::updateApplications()
-{
-    QList<TsTaskChange> changes(mApplicationService.changeList());
-
-    if (changes.count() == 0) {
-        return;
-    }
-    //check 1st item whether we have cancel change - if so reset model
-    if (changes[0].first.changeType() == TsTaskChangeInfo::EChangeCancel) {
-        fullUpdate();
-        return;
-    }
-    for (int iter(0); iter < changes.count(); iter++) {
-        switch (changes[iter].first.changeType()) {
-            case TsTaskChangeInfo::EChangeDelete :
-                removeRows(changes[iter].first.oldOffset(), 1);
-                break;
-            case TsTaskChangeInfo::EChangeInsert :
-                insertRows(changes[iter].first.newOffset(), 1,
-                           new TsModelItem(changes[iter].second));
-                break;
-            case TsTaskChangeInfo::EChangeMove :
-                moveRows(changes[iter].first.oldOffset(), changes[iter].first.newOffset());
-                break;
-            case TsTaskChangeInfo::EChangeUpdate :
-                updateRows(changes[iter].first.oldOffset(),
-                           new TsModelItem(changes[iter].second));
-                break;
-            default:
-                break;
-        }
-    }
-}
-
-/*!
-    reset model
-*/
-void TsModel::fullUpdate()
-{
-    beginResetModel();
-    qDeleteAll(mEntries);
-    mEntries.clear();
-    getApplications();
-    endResetModel();
-
-}
-
-/*!
-    Read list of running applications
-*/
-void TsModel::getApplications()
-{
-    //get all running applications and append to entries list
-    QList<TsTaskChange> tasks(mApplicationService.changeList(true));
-    foreach(TsTaskChange taskData, tasks) {
-        if (!taskData.second.isNull()) {
-            mEntries.append(new TsModelItem(taskData.second));
-        }
-    }
-}
-
-/*!
-    Returns an entry from model
-    \param index of entry in model
-    \retval pointer to an entry
-*/
-TsModelItem *TsModel::entry(const QModelIndex &index) const
-{
-    return mEntries.at(index.row());
-}
--- a/tsdevicedialog/tsdevicedialogplugin/src/tsmodelitem.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +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: tsmodelitem.cpp
-*
-*/
-
-#include "tsmodelitem.h"
-
-#include <HbIcon>
-
-#include <tstask.h>
-
-#include "tsdataroles.h"
-
-/*!
-    \class TsModelItem
-    \ingroup group_tsdevicedialogplugin
-    \brief Item presenting running apps in the grid.
-*/
-
-/*!
-    Standard C++ constructor
-    /param entry - Task Monitor data
-*/
-TsModelItem::TsModelItem(QSharedPointer<TsTask> entry)
-    : mEntry(entry)
-{
-    //no implementation required
-}
-
-/*!
-    Standard C++ destructor
-*/
-TsModelItem::~TsModelItem()
-{
-}
-
-/*!
-    Returns the data stored under the given role.
-    /param role - requested data role
-    /return data encapulated by QVariant
-*/
-QVariant TsModelItem::data(int role) const
-{
-    switch (role) {
-        case Qt::DisplayRole:
-            return QVariant(mEntry->name());
-        case Qt::DecorationRole:
-            return QVariant::fromValue<HbIcon>(HbIcon(mEntry->screenshot()));
-        case TsDataRoles::Closable:
-            return QVariant(mEntry->isClosable());
-        case TsDataRoles::Active:
-            return QVariant(mEntry->isActive());
-        default:
-            return QVariant(QVariant::Invalid);
-    }
-}
-
-/*!
-    Close running application repesented by entry
-*/
-void TsModelItem::close()
-{
-    mEntry->close();
-}
-
-/*!
-    Open or move to foreground application repesented by entry
-*/
-void TsModelItem::open()
-{
-    mEntry->open();
-}
--- a/tsdevicedialog/tsdevicedialogplugin/src/tsnoitemslabel.cpp	Mon Sep 27 11:31:59 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:
-*
-*/
-#include "tsnoitemslabel.h"
-
-#include <HbFrameItem>
-
-/*!
-    \class TsTasksGridItem
-    \ingroup group_tsdevicedialogplugin
-    \brief Item that should be presented in grid.
-*/
-
-TsNoItemsLabel::TsNoItemsLabel(QGraphicsItem *parent) : HbLabel(parent)
-{
-    HbFrameDrawer *drawer = new HbFrameDrawer(QLatin1String("qtg_fr_multimedia_trans"), HbFrameDrawer::NinePieces);
-    setBackgroundItem(new HbFrameItem(drawer));
-}
--- a/tsdevicedialog/tsdevicedialogplugin/src/tstasksgrid.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +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 "tstasksgrid.h"
-
-void TsTasksGrid::polish(HbStyleParameters &params)
-{
-    HbGridView::polish(params);
-
-    // center second item when dialog is shown
-    if (model()) {
-        scrollTo(model()->index(1, 0), PositionAtCenter);
-    }
-}
--- a/tsdevicedialog/tsdevicedialogplugin/src/tstasksgriditem.cpp	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +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 "tstasksgriditem.h"
-
-#include <HbPushButton>
-#include <HbAbstractItemView>
-#include <HbFrameItem>
-#include <HbTextItem>
-#include <HbIconItem>
-#include <HbStyleLoader>
-
-#include "tsdataroles.h"
-
-/*!
-    \class TsTasksGridItem
-    \ingroup group_tsdevicedialogplugin
-    \brief Item that should be presented in grid.
-*/
-
-TsTasksGridItem::TsTasksGridItem()
-    :
-    HbAbstractViewItem(),
-    mScreenshotLabel(0),
-    mApplicationNameLabel(0),
-    mDeleteButton(0),
-    mActiveLabelFrame(0),
-    mActiveLabel(0)
-{
-    // Register the custom docml and css to provide our own style to the list items
-    bool widgetmlLoaded =
-        HbStyleLoader::registerFilePath(":/resource/tstasksgriditem.widgetml");
-    Q_ASSERT(widgetmlLoaded);
-    bool cssLoaded =
-        HbStyleLoader::registerFilePath(":/resource/tstasksgriditem.css");
-    Q_ASSERT(cssLoaded);
-}
-
-TsTasksGridItem::TsTasksGridItem(const TsTasksGridItem &item) : HbAbstractViewItem(item)
-{
-    mScreenshotLabel = new HbIconItem(this);
-    mApplicationNameLabel = new HbTextItem(this);
-    mDeleteButton = new HbPushButton(this);
-    HbFrameItem *screenshotFrame = new HbFrameItem(this);
-    screenshotFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-    screenshotFrame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
-
-    HbFrameItem *applicationLabelFrame = new HbFrameItem(this);
-    applicationLabelFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-    applicationLabelFrame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
-
-    mActiveLabel = new HbTextItem(hbTrId("txt_ts_label_active"), this);
-    mActiveLabelFrame = new HbFrameItem(this);
-    mActiveLabelFrame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-    mActiveLabelFrame->frameDrawer().setFrameGraphicsName("qtg_fr_multimedia_trans");
-
-    mDeleteButton->setIcon(HbIcon("qtg_mono_exit"));
-
-    HbStyle::setItemName(mScreenshotLabel, "screenshot");
-    HbStyle::setItemName(mApplicationNameLabel, "appname");
-    HbStyle::setItemName(mDeleteButton, "closebadge");
-    mDeleteButton->setObjectName("closebadge");
-    HbStyle::setItemName(screenshotFrame, "screenshotFrame");
-    HbStyle::setItemName(applicationLabelFrame, "applicationLabelFrame");
-    HbStyle::setItemName(mActiveLabel, "activeLabel");
-    HbStyle::setItemName(mActiveLabelFrame, "activeLabelFrame");
-    connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(handleDeleteClicked()));
-}
-
-HbAbstractViewItem *TsTasksGridItem::createItem()
-{
-    TsTasksGridItem *newItem = new TsTasksGridItem(*this);
-    connect(newItem, SIGNAL(deleteClicked(QModelIndex)), itemView(), SIGNAL(deleteButtonClicked(QModelIndex)));
-    return newItem;
-}
-
-void TsTasksGridItem::handleDeleteClicked()
-{
-    emit deleteClicked(modelIndex());
-}
-
-void TsTasksGridItem::updateChildItems()
-{
-    mScreenshotLabel->setIcon(modelIndex().data(Qt::DecorationRole).value<HbIcon>());
-    mApplicationNameLabel->setText(modelIndex().data(Qt::DisplayRole).toString());
-
-    QVariant closableData(modelIndex().data(TsDataRoles::Closable));
-    const bool isClosable(closableData.isValid() && closableData.toBool());
-    if (isClosable) {
-        mDeleteButton->show();
-    } else {
-        mDeleteButton->hide();
-    }
-
-    QVariant activeData(modelIndex().data(TsDataRoles::Active));
-    const bool isActive(activeData.isValid() && activeData.toBool());
-    if (isActive) {
-        mActiveLabel->show();
-        mActiveLabelFrame->show();
-    } else {
-        mActiveLabel->hide();
-        mActiveLabelFrame->hide();
-    }
-}
--- a/tsdevicedialog/tsdevicedialogplugin/tsdevicedialogplugin.pro	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +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: tsdevicedialogplugin.pro
-#
-
-TEMPLATE = lib
-CONFIG += hb plugin mobility
-MOBILITY = publishsubscribe
-
-include (../common.pri)
-
-HEADERS +=  inc/tsdevicedialogcontainer.h \
-            inc/tsdevicedialogplugin.h \
-            inc/tsmodel.h \
-            inc/tsmodelitem.h \
-            inc/tstasksgrid.h \
-            inc/tstasksgriditem.h \
-            inc/tsdocumentloader.h \
-            inc/tsdataroles.h \
-            inc/tsnoitemslabel.h \
-
-SOURCES +=  src/tsdevicedialogcontainer.cpp \
-            src/tsdevicedialogplugin.cpp \
-            src/tsmodel.cpp \
-            src/tsmodelitem.cpp \
-            src/tstasksgrid.cpp \
-            src/tstasksgriditem.cpp \
-            src/tsdocumentloader.cpp \
-            src/tsnoitemslabel.cpp \
-
-INCLUDEPATH += . \
-               ./inc \
-               ../../inc \
-
-LIBS +=     -ltstaskmonitorclient
-            
-TRANSLATIONS = taskswitcher.ts
-
-RESOURCES += tsdevicedialogplugin.qrc
-               
-DOCML += resource/layout.docml
-               
-symbian {
-    TARGET.CAPABILITY = CAP_ECOM_PLUGIN
-    TARGET.UID3 = 0x2002677F
-    pluginstub.sources = tsdevicedialogplugin.dll
-    pluginstub.path = /resource/plugins/devicedialogs
-    DEPLOYMENT += pluginstub
-    
-    BLD_INF_RULES.prj_exports += \
-    "$${LITERAL_HASH}include <platform_paths.hrh>" \
-    "conf/tsdevicedialog.confml APP_LAYER_CONFML(tsdevicedialog.confml)" \
-    "conf/tsdevicedialog_2002677F.crml APP_LAYER_CRML(tsdevicedialog_2002677F.crml)"
-}
-
-win32 {
-    include ($$[QMAKE_MKSPECS]/features/hb_install.prf)
-    DESTDIR = $$HB_PLUGINS_DIR/devicedialogs
-}
--- a/tsdevicedialog/tsdevicedialogplugin/tsdevicedialogplugin.qrc	Mon Sep 27 11:31:59 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-        <file alias="resource/layout.docml">resource/layout.docml.bin</file>
-        <file>resource/tstasksgriditem.widgetml</file>
-        <file>resource/tstasksgriditem.css</file>        
-        <file>resource/hbdialog.css</file>        
-    </qresource>
-</RCC>