Revision: 201021
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 11 Jun 2010 13:38:41 +0300
changeset 6 41c0a814d878
parent 4 e52d42f9500c
child 7 38e85eb54906
child 8 6c9acdc6adc0
child 10 b04270301d3b
Revision: 201021 Kit: 2010123
logsui/logsapp/inc/logsbaseview.h
logsui/logsapp/inc/logsdefs.h
logsui/logsapp/inc/logsdetailsview.h
logsui/logsapp/inc/logsrecentcallsview.h
logsui/logsapp/inc/logsservicehandler.h
logsui/logsapp/inc/logsservicehandlerold.h
logsui/logsapp/inc/logsviewmanager.h
logsui/logsapp/logsapp.pro
logsui/logsapp/resources/detailsView.docml
logsui/logsapp/resources/logs.docml
logsui/logsapp/resources/logs.splashml
logsui/logsapp/resources/matchesView.docml
logsui/logsapp/resources/recentCallsView.docml
logsui/logsapp/service_conf.xml
logsui/logsapp/src/logsbaseview.cpp
logsui/logsapp/src/logscomponentrepository.cpp
logsui/logsapp/src/logsdetailsview.cpp
logsui/logsapp/src/logsmatchesview.cpp
logsui/logsapp/src/logspageindicatoritem.cpp
logsui/logsapp/src/logsrecentcallsview.cpp
logsui/logsapp/src/logsservicehandler.cpp
logsui/logsapp/src/logsservicehandlerold.cpp
logsui/logsapp/src/logsviewmanager.cpp
logsui/logsapp/src/main.cpp
logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsbaseview.h
logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsdetailsview.h
logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsrecentcallsview.h
logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsservicehandler.h
logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsviewmanager.h
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.cpp
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.h
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsevent.cpp
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsevent.h
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.cpp
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.cpp
logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.h
logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp
logsui/logsapp/tsrc/ut_logsapp/src/ut_logsdetailsview.cpp
logsui/logsapp/tsrc/ut_logsapp/src/ut_logsmatchesview.cpp
logsui/logsapp/tsrc/ut_logsapp/src/ut_logsrecentcallsview.cpp
logsui/logsapp/tsrc/ut_logsapp/src/ut_logsservicehandler.cpp
logsui/logsapp/tsrc/ut_logsapp/src/ut_logsviewmanager.cpp
logsui/logsapp/tsrc/ut_logsapp/stubs/hbapplication.h
logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs.cpp
logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs_helper.h
logsui/logsapp/tsrc/ut_logsapp/ut_logsapp.pro
logsui/logscntfinder/src/logscntfinder.cpp
logsui/logscntfinder/tsrc/pt_logscntfinder/inc/pt_logscntfinder.h
logsui/logscntfinder/tsrc/pt_logscntfinder/inc/pt_logscntfinderqwerty.h
logsui/logscntfinder/tsrc/pt_logscntfinder/pt_logscntfinder.pro
logsui/logscntfinder/tsrc/pt_logscntfinder/src/main.cpp
logsui/logscntfinder/tsrc/pt_logscntfinder/src/pt_logscntfinder.cpp
logsui/logscntfinder/tsrc/pt_logscntfinder/src/pt_logscntfinderqwerty.cpp
logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinder.h
logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinderqwerty.h
logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinderthai.h
logsui/logscntfinder/tsrc/st_logscntfinder/src/main.cpp
logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinder.cpp
logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinderqwerty.cpp
logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinderthai.cpp
logsui/logscntfinder/tsrc/st_logscntfinder/st_logscntfinder.pro
logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.cpp
logsui/logsengine/bwins/logsengineu.def
logsui/logsengine/eabi/logsengineu.def
logsui/logsengine/inc/logsdetailsmodel.h
logsui/logsengine/inc/logseventdata.h
logsui/logsengine/logsengine.pro
logsui/logsengine/logsengine.qrc
logsui/logsengine/logssymbianos/inc/logsdbconnector.h
logsui/logsengine/logssymbianos/src/logsdbconnector.cpp
logsui/logsengine/logssymbianos/tsrc/stubs/qtcontacts_stubs.cpp
logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsdbconnector.cpp
logsui/logsengine/src/logsdetailsmodel.cpp
logsui/logsengine/src/logsevent.cpp
logsui/logsengine/src/logseventdata.cpp
logsui/logsengine/src/logsmodel.cpp
logsui/logsengine/themes/icons/hbdefault/scalable/qtg_large_missed_video_call_unseen.svg
logsui/logsengine/themes/icons/hbdefault/scalable/qtg_large_missed_voice_call_unseen.svg
logsui/logsengine/themes/icons/hbdefault/scalable/qtg_large_missed_voip_call_unseen.svg
logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsevent.h
logsui/logsengine/tsrc/ut_logsengine/inc/ut_logseventdata.h
logsui/logsengine/tsrc/ut_logsengine/src/ut_logsevent.cpp
logsui/logsengine/tsrc/ut_logsengine/src/ut_logseventdata.cpp
logsui/logsservices/src/logsservices.cpp
logsui/rom/logsresources.iby
logsui/tsrc/logdbmodifier/addeventtest/install/clientlogstest.pkg
logsui/tsrc/logsservicestester/install/logsservicestester.pkg
logsui/tsrc/logsservicestester/logsservicestester.pro
logsui/tsrc/logsservicestester/logsservicetesterappcloser.cpp
logsui/tsrc/logsservicestester/logsservicetesterappcloser.h
logsui/tsrc/logsservicestester/logsservicetesterwidget.cpp
logsui/tsrc/logsservicestester/logsservicetesterwidget.h
logsui/tsrc/logsservicestester/main.cpp
recents_plat/logs_engine_api/inc/logsevent.h
recents_plat/logs_engine_api/inc/logsmodel.h
recents_plat/logs_services_api/inc/logsservices.h
--- a/logsui/logsapp/inc/logsbaseview.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/inc/logsbaseview.h	Fri Jun 11 13:38:41 2010 +0300
@@ -35,6 +35,8 @@
 class HbLabel;
 class HbListView;
 class LogsAbstractModel;
+class QDataStream;
+class HbActivityManager;
 
 /**
  * 
@@ -60,7 +62,13 @@
     virtual void activated(bool showDialer, QVariant args);
     virtual void deactivated();
     virtual bool isExitAllowed();
-    virtual void resetView();
+    virtual void resetView(); 
+    virtual void clearActivity(HbActivityManager& manager);
+    virtual QString saveActivity(QDataStream& serializedActivity, QVariantHash& metaData);
+    virtual QVariant loadActivity(
+        const QString& activityId, QDataStream& serializedActivity, QVariantHash& metaData);
+    virtual bool matchWithActivityId(const QString& activityId);
+    
 
 public slots:
     
@@ -188,7 +196,6 @@
     LogsAppViewId mViewId;
     LogsComponentRepository& mRepository;
     LogsAbstractViewManager& mViewManager;
-    HbAction* mSoftKeyBackAction;
     
     HbMenu* mShowFilterMenu; //not owned
     Dialpad* mDialpad; //not owned
@@ -205,6 +212,8 @@
     
     QSignalMapper* mCallTypeMapper;
     QString mLayoutSectionName;
+    
+    QStringList mActivities;
 };
 
 
--- a/logsui/logsapp/inc/logsdefs.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/inc/logsdefs.h	Fri Jun 11 13:38:41 2010 +0300
@@ -80,4 +80,27 @@
 const int logsContactSearchEnabled = 1;
 const int logsContactSearchDisabled = 2;
 
+
+
+// Interface related constants
+const char logsServiceName[] = "logs";
+const char logsInterfaceName[] = "com.nokia.symbian.ILogsView";
+const char logsOperationName[] = "show(QVariantMap)";
+
+const char logsViewIndexParam[] = "view_index";
+const char logsShowDialpadParam[] = "show_dialpad";
+const char logsDialpadTextParam[] = "dialpad_text";
+
+// Activity related constants
+const char logsActivityIdViewRecent[] = "LogsViewRecent";
+const char logsActivityIdViewCalled[] = "LogsViewCalled";
+const char logsActivityIdViewReceived[] = "LogsViewReceived";
+const char logsActivityIdViewMissed[] = "LogsViewMissed";
+const char logsActivityIdViewMatches[] = "LogsViewMatches";
+const char logsActivityIdViewDetails[] = "LogsViewDetails";
+
+const char logsActivityParamShowDialpad[] = "show_dialpad"; // val type bool
+const char logsActivityParamDialpadText[] = "dialpad_text"; // val type string
+
+
 #endif // LOGSDEFS_H
--- a/logsui/logsapp/inc/logsdetailsview.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/inc/logsdetailsview.h	Fri Jun 11 13:38:41 2010 +0300
@@ -43,6 +43,9 @@
     
     virtual void activated(bool showDialer, QVariant args);
     virtual void deactivated();
+    virtual QString saveActivity(QDataStream& serializedActivity, QVariantHash& metaData);
+    virtual QVariant loadActivity(
+        const QString& activityId, QDataStream& serializedActivity, QVariantHash& metaData);
 
 public slots:
     
--- a/logsui/logsapp/inc/logsrecentcallsview.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/inc/logsrecentcallsview.h	Fri Jun 11 13:38:41 2010 +0300
@@ -52,7 +52,9 @@
     virtual void activated(bool showDialer, QVariant args);
     virtual void deactivated();
     virtual bool isExitAllowed();
-    virtual void resetView();
+    virtual QString saveActivity(QDataStream& serializedActivity, QVariantHash& metaData);
+    virtual QVariant loadActivity(
+        const QString& activityId, QDataStream& serializedActivity, QVariantHash& metaData);
     
 public slots:
     
@@ -127,7 +129,7 @@
     LogsMatchesModel* mMatchesModel; 
     bool mMarkingMissedAsSeen;
     LogsPageIndicator* mPageIndicator;
-    bool mResetted;
+    bool mFirstActivation;
     
 };
 
--- a/logsui/logsapp/inc/logsservicehandler.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/inc/logsservicehandler.h	Fri Jun 11 13:38:41 2010 +0300
@@ -26,12 +26,13 @@
     {
         Q_OBJECT
     public:
+        
         explicit LogsServiceHandler(LogsMainWindow& mainWindow);
         ~LogsServiceHandler();
     
     public slots:
-        int start(int activatedView, bool showDialpad);
-        int startWithNum(int activatedView, bool showDialpad, QString dialpadText);
+
+        int show(const QVariantMap& params);
         
     signals:
     
@@ -40,11 +41,10 @@
     
     public:
         
-        LogsServices::LogsView currentlyActivatedView();
         bool isStartedUsingService() const;
         
     private:
-        int mActivatedView;
+
         LogsMainWindow& mMainWindow;
         bool mIsAppStartedUsingService;
         
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsapp/inc/logsservicehandlerold.h	Fri Jun 11 13:38:41 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 LOGSSERVICEHANDLEROLD_H
+#define LOGSSERVICEHANDLEROLD_H
+
+#include <xqserviceprovider.h>
+#include <logsservices.h>
+
+class LogsMainWindow;
+
+class LogsServiceHandlerOld : public XQServiceProvider
+    {
+        Q_OBJECT
+    public:
+        explicit LogsServiceHandlerOld(LogsMainWindow& mainWindow);
+        ~LogsServiceHandlerOld();
+    
+    public slots:
+        int start(int activatedView, bool showDialpad);
+        int startWithNum(int activatedView, bool showDialpad, QString dialpadText);
+        
+    signals:
+    
+        void activateView(LogsServices::LogsView activatedView, bool showDialpad);
+        void activateView(QString dialpadText);
+    
+    public:
+        
+        bool isStartedUsingService() const;
+        
+    private:
+        LogsMainWindow& mMainWindow;
+        bool mIsAppStartedUsingService;
+        
+    private:
+        friend class UT_LogsServiceHandler;
+        friend class UT_LogsViewManager;
+    };
+
+#endif //LOGSSERVICEHANDLEROLD_H
--- a/logsui/logsapp/inc/logsviewmanager.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/inc/logsviewmanager.h	Fri Jun 11 13:38:41 2010 +0300
@@ -27,6 +27,7 @@
 class HbMainWindow;
 class LogsComponentRepository;
 class LogsServiceHandler;
+class LogsServiceHandlerOld;
 class LogsMainWindow;
 class HbView;
 class LogsBaseView;
@@ -48,7 +49,8 @@
      * @param mainWindow
      * @param service
      */
-    LogsViewManager( LogsMainWindow& mainWindow, LogsServiceHandler& service );
+    LogsViewManager( LogsMainWindow& mainWindow, LogsServiceHandler& service,
+            LogsServiceHandlerOld& serviceOld );
     ~LogsViewManager();
 
 public slots:
@@ -71,16 +73,23 @@
     void proceedExit();
     void handleOrientationChanged();
     void completeViewActivation();
+    void saveActivity();  
     
 private:
     
     void initViews();
-    bool doActivateView(LogsAppViewId viewId, bool showDialpad, QVariant args);
+    bool doActivateView(LogsAppViewId viewId, bool showDialpad, 
+                        QVariant args, const QString& dialpadText = QString());
+    bool loadActivity();
+    LogsAppViewId checkMatchesViewTransition(
+        LogsAppViewId viewId, const QString& dialpadText);
+    void handleFirstActivation();
     
 private: //data 
     
     LogsMainWindow& mMainWindow;
     LogsServiceHandler& mService;
+    LogsServiceHandlerOld& mServiceOld;
     LogsComponentRepository* mComponentsRepository;
     QList<LogsBaseView*> mViewStack;
     bool mFirstActivation;
--- a/logsui/logsapp/logsapp.pro	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/logsapp.pro	Fri Jun 11 13:38:41 2010 +0300
@@ -39,6 +39,7 @@
 HEADERS += inc/logsdetailsview.h
 HEADERS += inc/logsmatchesview.h
 HEADERS += inc/logsservicehandler.h
+HEADERS += inc/logsservicehandlerold.h
 HEADERS += inc/logseffecthandler.h
 HEADERS += inc/logspageindicator.h
 HEADERS += inc/logspageindicatoritem.h
@@ -53,6 +54,7 @@
 SOURCES += src/logsdetailsview.cpp
 SOURCES += src/logsmatchesview.cpp
 SOURCES += src/logsservicehandler.cpp
+SOURCES += src/logsservicehandlerold.cpp
 SOURCES += src/logseffecthandler.cpp
 SOURCES += src/logspageindicator.cpp
 SOURCES += src/logspageindicatoritem.cpp
--- a/logsui/logsapp/resources/detailsView.docml	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/resources/detailsView.docml	Fri Jun 11 13:38:41 2010 +0300
@@ -85,7 +85,7 @@
             <ref object="logs_act_open_contact" role="HbMenu:addAction"/>
             <ref object="logs_act_delete_event" role="HbMenu:addAction"/>
         </widget>
-        <string name="title" value="Dialer"/>
+        <string locid="txt_dial_title_dialer" name="title" value="Dialer"/>
     </widget>
     <!-- Context menu -->    
     <widget name="logs_show_filter_menu" type="HbMenu">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsapp/resources/logs.docml	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+    <widget name="mainView" type="HbView">
+        <widget name="groupBox" role="HbView:widget" type="HbGroupBox">
+            <real name="z" value="1"/>
+            <bool name="collapsable" value="FALSE"/>
+	   <string name="heading" value=" "/>
+        </widget>
+        <string locid="Dialer" name="title" value="dialler"/>
+    </widget>
+    <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+        <uistate name="Common ui state" sections="#common"/>
+    </metadata>
+</hbdocument>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsapp/resources/logs.splashml	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbsplash version="1">
+    <docml>logs.docml</docml>
+    <widget>mainView</widget>
+    <appuid>0x101F4CD5</appuid>
+    <tsappname>dialer</tsappname>
+</hbsplash>
--- a/logsui/logsapp/resources/matchesView.docml	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/resources/matchesView.docml	Fri Jun 11 13:38:41 2010 +0300
@@ -86,7 +86,7 @@
             <ref object="logs_act_create_message" role="HbMenu:addAction"/>
             <ref object="logs_act_contact_search" role="HbMenu:addAction"/>
         </widget>
-        <string name="title" value="Dialer"/>
+        <string locid="txt_dial_title_dialer" name="title" value="Dialer"/>
     </widget>
     <!-- Context menu -->    
     <widget name="logs_show_filter_menu" type="HbMenu">
--- a/logsui/logsapp/resources/recentCallsView.docml	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/resources/recentCallsView.docml	Fri Jun 11 13:38:41 2010 +0300
@@ -57,7 +57,7 @@
                     <widget name="logs_groupbox_recent_calls" type="HbGroupBox">
                         <real name="z" value="1"/>
                         <bool name="collapsable" value="FALSE"/>
-                        <string name="heading" value="Recent calls"/>
+                        <string locid="txt_dialer_subhead_recent_calls" name="heading" value="Recent calls"/>
                     </widget>
                     <widget name="logs_page_indicator" type="LogsPageIndicator">
                         <real name="z" value="2"/>
@@ -107,7 +107,7 @@
             <ref object="logs_act_clear_list" role="HbMenu:addAction"/>
             <ref object="logs_act_contact_search" role="HbMenu:addAction"/>
         </widget>
-        <string name="title" value="Dialer"/>
+        <string locid="txt_dial_title_dialer" name="title" value="Dialer"/>
     </widget>
     <!-- Context menu -->    
     <widget name="logs_show_filter_menu" type="HbMenu">
--- a/logsui/logsapp/service_conf.xml	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/service_conf.xml	Fri Jun 11 13:38:41 2010 +0300
@@ -1,7 +1,17 @@
 <?xml version="1.0" encoding="utf-8" ?>
-<service name="com.nokia.services.logsservices"  filepath="must-not-be-empty" >
-  <description>Logs services</description>
-  <interface name="starter" version="1.0" capabilities="">
-    <description>Starter interface</description>
+<service>
+  <name>logs</name>
+  <filepath>No path</filepath>
+  <description>Logs service</description>
+  <interface>
+     <name>com.nokia.symbian.ILogsView</name>
+     <version>1.0</version>
+     <description>Interface to open a view of logs application</description>
   </interface>
-</service>
+  <interface>
+     <name>starter</name>
+     <version>1.0</version>
+     <description>Deprecated logs starter interface</description>
+     <customproperty key="deprecatedsn">com.nokia.services.logsservices</customproperty>
+  </interface>
+</service>
\ No newline at end of file
--- a/logsui/logsapp/src/logsbaseview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logsbaseview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -42,6 +42,7 @@
 #include <hblistview.h>
 #include <QGraphicsLinearLayout>
 #include <hbpushbutton.h>
+#include <hbactivitymanager.h>
 
 
 Q_DECLARE_METATYPE(LogsCall*)
@@ -49,7 +50,6 @@
 Q_DECLARE_METATYPE(LogsContact*)
 Q_DECLARE_METATYPE(LogsDetailsModel*)
 
-const int contextMenuTimeout = 5000000; //5 secs
 
 // -----------------------------------------------------------------------------
 // 
@@ -73,11 +73,11 @@
       mCallTypeMapper(0)
 {
     LOGS_QDEBUG( "logs [UI] -> LogsBaseView::LogsBaseView()" );
+
+    setNavigationAction(new HbAction(Hb::BackNaviAction, this));
+    connect(navigationAction(), SIGNAL(triggered()), this, 
+            SLOT(handleBackSoftkey()));
     
-    mSoftKeyBackAction = new HbAction(Hb::BackNaviAction, this);
-    connect(mSoftKeyBackAction, SIGNAL(triggered()), this, 
-            SLOT(handleBackSoftkey()));
-
     mDialpad =  mRepository.dialpad();
     
     LOGS_QDEBUG( "logs [UI] <- LogsBaseView::LogsBaseView()" );
@@ -136,6 +136,51 @@
 //
 // -----------------------------------------------------------------------------
 //
+void LogsBaseView::clearActivity(HbActivityManager& manager)
+{
+    foreach ( const QString& activity, mActivities ){
+        manager.removeActivity(activity);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+QString LogsBaseView::saveActivity(
+    QDataStream& serializedActivity, QVariantHash& metaData)
+{
+    Q_UNUSED( serializedActivity );
+    Q_UNUSED( metaData );
+    return mActivities.isEmpty() ? QString() : mActivities.at(0);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+QVariant LogsBaseView::loadActivity(
+    const QString& activityId, QDataStream& serializedActivity, QVariantHash& metaData)
+{
+    Q_UNUSED( activityId );
+    Q_UNUSED( serializedActivity );
+    Q_UNUSED( metaData );
+    return QVariant();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+bool LogsBaseView::matchWithActivityId(const QString& activityId)
+{
+    return mActivities.contains(activityId);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 void LogsBaseView::activated(bool showDialer, QVariant args)
 {
     LOGS_QDEBUG( "logs [UI] -> LogsBaseView::activated()" );
@@ -154,10 +199,6 @@
     connect( &mDialpad->editor(), SIGNAL( contentsChanged() ), this,
             SLOT( dialpadEditorTextChanged() ) );
 
-    if ( navigationAction() != mSoftKeyBackAction ) {
-        setNavigationAction(mSoftKeyBackAction);
-    }
-    
     if (showDialer && !mDialpad->isOpen()) {
         openDialpad();
     }
@@ -365,6 +406,9 @@
     // Need to do request in async manner, otherwise new phonebook ui process
     // will be started due bug(?) in highway.
     XQServiceRequest snd("com.nokia.services.phonebookappservices.Launch","launch()", false);
+    XQRequestInfo info;
+    info.setForeground(true);
+    snd.setInfo(info);
     int retValue;
     snd.send(retValue);
     
@@ -378,19 +422,15 @@
 void LogsBaseView::setDialpadPosition()
 {
     HbMainWindow& window = mViewManager.mainWindow(); 
-    // layoutrect broken, fix will be in MCL wk14, use workaround meanwhile
-    //QRectF screenRect = window.layoutRect();
-    QRectF screenRect = (window.orientation() == Qt::Horizontal) ? 
-        QRectF(0,0,640,360) : QRectF(0,0,360,640);
-
+    QRectF screenRect = window.layoutRect();
     LOGS_QDEBUG_2( "logs [UI] -> LogsBaseView::setDialpadPosition(), screenRect:", 
             screenRect );
     if (window.orientation() == Qt::Horizontal) {
         // dialpad takes half of the screen width    
         mDialpad->setPos(QPointF(screenRect.width()/2,
-                                 this->scenePos().y()));
+                                 scenePos().y()));
         mDialpad->setPreferredSize(screenRect.width()/2,
-                                   (screenRect.height()-scenePos().y()));                                  
+                                   (screenRect.height()-scenePos().y())); 
     } else {
         // dialpad takes 55% of the screen height
         qreal screenHeight = screenRect.height();
@@ -498,7 +538,6 @@
     LOGS_QDEBUG( "logs [UI] -> LogsBaseView::showListItemMenu()" );
     HbMenu* itemContextMenu = new HbMenu();    
     itemContextMenu->setDismissPolicy(HbMenu::TapAnywhere);
-    itemContextMenu->setTimeout(contextMenuTimeout);
     itemContextMenu->setAttribute(Qt::WA_DeleteOnClose);
     
     updateListItemData(item->modelIndex());    
@@ -1050,6 +1089,7 @@
 void LogsBaseView::askConfirmation( QString heading , QString text,
         QObject* receiver, const char* okSlot, const char* cancelSlot )
 {
+    LOGS_QDEBUG( "logs [UI] -> LogsBaseView::askConfirmation()" );
     HbMessageBox* note = new HbMessageBox(text, HbMessageBox::MessageTypeQuestion);
     note->setAttribute(Qt::WA_DeleteOnClose);
     note->setHeadingWidget(new HbLabel(heading));
@@ -1070,6 +1110,7 @@
         }
     }
     note->open();
+    LOGS_QDEBUG( "logs [UI] <- LogsBaseView::askConfirmation()" );
 }
 
 // -----------------------------------------------------------------------------
--- a/logsui/logsapp/src/logscomponentrepository.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logscomponentrepository.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -43,9 +43,9 @@
       mDialpad(0),
       mDialpadKeyHandler(0)
 {
-    bool resourceControl = true;
-    mModel = new LogsModel(LogsModel::LogsRecentModel, resourceControl);
+    mModel = new LogsModel(LogsModel::LogsRecentModel);
 }
+
 // -----------------------------------------------------------------------------
 // 
 // -----------------------------------------------------------------------------
--- a/logsui/logsapp/src/logsdetailsview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logsdetailsview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -23,6 +23,7 @@
 #include "logsabstractviewmanager.h"
 #include "logsdefs.h"
 #include "logscontact.h"
+#include "logsmodel.h"
 
 //SYSTEM
 #include <hblistview.h>
@@ -50,6 +51,8 @@
     //TODO: taking away due to toolbar bug. If toolbar visibility changes on view
     //activation, there will be a crash due to previous view effect is playing
     //addViewSwitchingEffects();
+    
+    mActivities.append( logsActivityIdViewDetails );
 }
     
 // -----------------------------------------------------------------------------
@@ -113,15 +116,44 @@
 }
 
 // -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+QString LogsDetailsView::saveActivity(
+    QDataStream& serializedActivity, QVariantHash& metaData)
+{
+    if ( mDetailsModel ){
+        mDetailsModel->getLogsEvent().serialize(serializedActivity);
+    }
+    return LogsBaseView::saveActivity(serializedActivity, metaData);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+QVariant LogsDetailsView::loadActivity(
+    const QString& activityId, QDataStream& serializedActivity, QVariantHash& metaData)
+{
+    Q_UNUSED( activityId );
+    Q_UNUSED( metaData );
+    LogsEvent event(serializedActivity);
+    LogsDetailsModel* details = mRepository.model()->logsDetailsModel(event);
+    return qVariantFromValue( details );
+}
+
+// -----------------------------------------------------------------------------
 // 
 // -----------------------------------------------------------------------------
 //
 void LogsDetailsView::callKeyPressed()
 {
     LOGS_QDEBUG( "logs [UI] -> LogsDetailsView::callKeyPressed()" );
+    
     if ( !tryCallToDialpadNumber() && mCall ){
         mCall->initiateCallback();
     }
+
     LOGS_QDEBUG( "logs [UI] <- LogsDetailsView::callKeyPressed()" );
 }
 
--- a/logsui/logsapp/src/logsmatchesview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logsmatchesview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -48,6 +48,8 @@
       mAddToContactsButton(0)
 {
     LOGS_QDEBUG( "logs [UI] <-> LogsMatchesView::LogsMatchesView()" );
+    
+    mActivities.append( logsActivityIdViewMatches );
 }
     
 // -----------------------------------------------------------------------------
@@ -216,7 +218,7 @@
     
     QString pattern = mDialpad->editor().text();
     if ( pattern.isEmpty() ){
-        // Treat empty input field same was as back press
+        // Treat empty input field same way as back press
         LogsBaseView::handleBackSoftkey();
     } else if ( mModel ) {
         mModel->logsMatches( pattern );
--- a/logsui/logsapp/src/logspageindicatoritem.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logspageindicatoritem.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -24,7 +24,7 @@
 
 const char logsNormalIconName[]    = "qtg_mono_tab_passive";
 const char logsHighlightIconName[] = "qtg_mono_tab_active";
-const char logsIconColor[] = "qtc_button_normal";//"qtc_default_main_pane_normal");//
+const char logsIconColor[] = "qtc_viewtitle_normal"; //groupbox text color
   
 const int logsEffectDurationInMs = 1000;
 
@@ -73,6 +73,7 @@
             startAnimation();
         } else {
             setIcon(HbIcon(logsNormalIconName));
+            updateColor();
         }
     }
 }
@@ -136,4 +137,5 @@
 void LogsPageIndicatorItem::animationFinished()
 {
     graphicsEffect()->setEnabled(false);
+    updateColor();
 }
--- a/logsui/logsapp/src/logsrecentcallsview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logsrecentcallsview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -43,6 +43,7 @@
 #include <hbmessagebox.h>
 #include <hbmainwindow.h>
 #include <QTimer>
+#include <hbactivitymanager.h>
 
 Q_DECLARE_METATYPE(LogsMatchesModel*)
 
@@ -67,7 +68,7 @@
       mMatchesModel(0),
       mMarkingMissedAsSeen(false),
       mPageIndicator(0),
-      mResetted(false)
+      mFirstActivation(true)
 {
     LOGS_QDEBUG( "logs [UI] <-> LogsRecentCallsView::LogsRecentCallsView()" );
     mModel = mRepository.model();
@@ -75,6 +76,13 @@
     //TODO: taking away due to toolbar bug. If toolbar visibility changes on view
     //activation, there will be a crash due to previous view effect is playing
     //addViewSwitchingEffects();
+    
+    // Important to add in the same order as mCurrentView enums as correct
+    // activity id is taken directly from the array based on the enum
+    mActivities.append( logsActivityIdViewRecent );
+    mActivities.append( logsActivityIdViewReceived );
+    mActivities.append( logsActivityIdViewCalled );
+    mActivities.append( logsActivityIdViewMissed );
 }
     
 // -----------------------------------------------------------------------------
@@ -105,7 +113,11 @@
     // base class handling first
     LogsBaseView::activated(showDialer, args);
     
-    LogsServices::LogsView view = static_cast<LogsServices::LogsView>( args.toInt() );
+    int internalViewId = args.toInt();
+    if ( internalViewId < 0 || internalViewId > LogsServices::ViewMissed ){
+        internalViewId = LogsServices::ViewAll;
+    }
+    LogsServices::LogsView view = static_cast<LogsServices::LogsView>( internalViewId );
 
     // View update is needed when we activate view for the first time (!mFilter)
     // or if view has to be changed
@@ -115,14 +127,9 @@
     activateEmptyListIndicator(mFilter);
     
     mPageIndicator->setActiveItemIndex(mConversionMap.value(mCurrentView));
+
+    mFirstActivation = false;
     
-    if ( mResetted ){
-        // After reset, first data addition should cause scrolling to topitem
-        connect( mFilter, SIGNAL(rowsInserted(const QModelIndex&,int,int)), 
-                 this, SLOT(scrollToTopItem()) );
-        mResetted = false;
-    }
-
     LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::activated()" );  
 }
 
@@ -161,15 +168,31 @@
 //
 // -----------------------------------------------------------------------------
 //
-void LogsRecentCallsView::resetView()
+QString LogsRecentCallsView::saveActivity(
+    QDataStream& serializedActivity, QVariantHash& metaData)
 {
-    LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::resetView()" );
-    LogsBaseView::resetView();
-    mResetted = true;
-    LOGS_QDEBUG( "logs [UI] <- LogsRecentCallsView::resetView()" );
+    Q_UNUSED( serializedActivity );
+    Q_UNUSED( metaData );
+    if ( mCurrentView >= 0 && mCurrentView < mActivities.count() ){
+        return mActivities.at( mCurrentView );
+    }
+    return QString();
 }
 
 // -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+QVariant LogsRecentCallsView::loadActivity(
+    const QString& activityId, QDataStream& serializedActivity, QVariantHash& metaData)
+{
+    Q_UNUSED( serializedActivity );
+    Q_UNUSED( metaData );
+    return mActivities.indexOf(activityId);
+}
+
+
+// -----------------------------------------------------------------------------
 // LogsRecentCallsView::initView
 // -----------------------------------------------------------------------------
 //
@@ -718,24 +741,22 @@
 //
 int LogsRecentCallsView::getListItemTextWidth()
 {
-    LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::ListItemText()" );
-
-    qreal width = 0;
+    LOGS_QDEBUG( "logs [UI] -> LogsRecentCallsView::getListItemTextWidth()" );
 
-    // layoutrect broken, fix will be in MCL wk14, use workaround meanwhile
-    //QRectF screenRect = mViewManager.mainWindow().layoutRect();
-    QRectF screenRect = (mViewManager.mainWindow().orientation() == Qt::Horizontal) ? 
-            QRectF(0,0,640,360) : QRectF(0,0,360,640);
+    qreal width = 0.0;
+    QRectF screenRect = mViewManager.mainWindow().layoutRect();
     LOGS_QDEBUG_2( "logs [UI]  screenRect:", screenRect );
     
     // Cannot use hb-param-screen-width in expressions currently due bug in layoutrect
     qreal modifier = 0.0;
     QString expr;
     if (mListView->layoutName() == QLatin1String(logsListDefaultLayout)) {
-        expr = "expr(var(hb-param-graphic-size-primary-medium) + var(hb-param-margin-gene-left) + var(hb-param-margin-gene-right) + var(hb-param-margin-gene-middle-horizontal))";
+        expr = "expr(var(hb-param-graphic-size-primary-medium) + var(hb-param-margin-gene-left) ";
+        expr += "+ var(hb-param-margin-gene-right) + var(hb-param-margin-gene-middle-horizontal))";
         width = screenRect.width();
     } else {
-        expr = "expr(var(hb-param-graphic-size-primary-medium) + var(hb-param-margin-gene-left) + var(hb-param-margin-gene-right))";
+        expr = "expr(var(hb-param-graphic-size-primary-medium) + var(hb-param-margin-gene-left) ";
+        expr += "+ var(hb-param-margin-gene-right))";
         width = screenRect.width() / 2;
     }
     
@@ -744,7 +765,7 @@
     }
     width -= modifier;
     
-    LOGS_QDEBUG_2( "logs [UI] <- LogsRecentCallsView::ListItemText(): ", width );   
+    LOGS_QDEBUG_2( "logs [UI] <- LogsRecentCallsView::getListItemTextWidth(): ", width );   
     return qRound(width);
 }
 
@@ -769,7 +790,7 @@
 //
 void LogsRecentCallsView::handleMissedCallsMarking()
 {
-    if ( mFilter && !mMarkingMissedAsSeen && !mResetted && 
+    if ( mFilter && !mMarkingMissedAsSeen && !mFirstActivation && 
           ( mFilter->filterType() == LogsFilter::Missed || 
             mFilter->filterType() == LogsFilter::All ) ){
         // Don't care if timer would be already running, slot's implementation
--- a/logsui/logsapp/src/logsservicehandler.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logsservicehandler.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -17,21 +17,21 @@
 //USER
 #include "logsservicehandler.h"
 #include "logslogger.h"
+#include "logsdefs.h"
 #include "logsmainwindow.h"
 #include <xqserviceutil.h>
 
 //SYSTEM
 
 // -----------------------------------------------------------------------------
-// LogsService::LogsService
+// LogsServiceHandler::LogsServiceHandler
 // -----------------------------------------------------------------------------
 //
 LogsServiceHandler::LogsServiceHandler(LogsMainWindow& mainWindow)
-    : XQServiceProvider(QLatin1String("com.nokia.services.logsservices.starter"),0), 
-      mActivatedView(0),
+    : XQServiceProvider(QLatin1String("logs.com.nokia.symbian.ILogsView"),0), 
       mMainWindow(mainWindow)
 {
-    LOGS_QDEBUG( "logs [UI] -> LogsServiceHandler::LogsServiceHandler()" )
+    LOGS_QDEBUG( "logs [UI] -> LogsServiceHandler::LogsServiceHandler(), ILogsView" )
     
     publishAll();
     mIsAppStartedUsingService = XQServiceUtil::isService();
@@ -51,67 +51,44 @@
 }
 
 // -----------------------------------------------------------------------------
-// LogsServiceHandler::start
+// LogsServiceHandler::show
 // -----------------------------------------------------------------------------
 //
-int LogsServiceHandler::start(int activatedView, bool showDialpad)
+int LogsServiceHandler::show(const QVariantMap& params)
 {
-    LOGS_QDEBUG_2( "logs [UI] -> LogsServiceHandler::start(), view:", activatedView )
+    LOGS_QDEBUG( "logs [UI] -> LogsServiceHandler::show()" )
+    int activatedView = params.value(logsViewIndexParam, 
+                            QVariant((int)LogsServices::ViewAll)).toInt();
+    bool showDialpad = params.value(logsShowDialpadParam, 
+                            QVariant(false)).toBool();
+    QString dialpadText = params.value(logsDialpadTextParam, 
+                            QVariant(QString())).toString();
+    
+    LOGS_QDEBUG_2( "logs [UI] activatedView:", activatedView )
+    LOGS_QDEBUG_2( "logs [UI] showDialpad:", showDialpad )
+    LOGS_QDEBUG_2( "logs [UI] dialpadText:", dialpadText )
     
     if ( activatedView < LogsServices::ViewAll || 
          activatedView > LogsServices::ViewMissed ){
-        LOGS_QDEBUG( "logs [UI] <- LogsServiceHandler::start(), incorrect view" )
+        LOGS_QDEBUG( "logs [UI] <- LogsServiceHandler::show(), incorrect view" )
         return -1;
     }
+    
     mIsAppStartedUsingService = true;
-    mActivatedView = activatedView;
     
     LOGS_QDEBUG( "logs [UI]     Bring app to foreground" )
     mMainWindow.bringAppToForeground();
     
-    emit activateView((LogsServices::LogsView)mActivatedView, showDialpad);
-
-    LOGS_QDEBUG( "logs [UI] <- LogsServiceHandler::start()" )
+    if (!dialpadText.isEmpty()) {
+        emit activateView(dialpadText);
+    } else {
+        emit activateView((LogsServices::LogsView)activatedView, showDialpad);
+    }
+    LOGS_QDEBUG( "logs [UI] <- LogsServiceHandler::show()" )
     return 0;
 }
 
 // -----------------------------------------------------------------------------
-// LogsServiceHandler::startWithNum
-// -----------------------------------------------------------------------------
-//
-int LogsServiceHandler::startWithNum(int activatedView, bool showDialpad, QString dialpadText)
-{
-    LOGS_QDEBUG_2( "logs [UI] -> LogsServiceHandler::startWithNum(), view:", activatedView )
-    
-    Q_UNUSED(showDialpad);
-    
-    if ( activatedView < LogsServices::ViewAll || 
-         activatedView > LogsServices::ViewMissed ){
-        LOGS_QDEBUG( "logs [UI] <- LogsServiceHandler::startWithNum(), incorrect view" )
-        return -1;
-    }
-    mIsAppStartedUsingService = true;
-    mActivatedView = activatedView;
-    
-    LOGS_QDEBUG( "logs [UI]     Bring app to foreground" )
-    mMainWindow.bringAppToForeground();
-    
-    emit activateView(dialpadText);
-
-    LOGS_QDEBUG( "logs [UI] <- LogsServiceHandler::startWithNum()" )
-    return 0;
-}
-
-// -----------------------------------------------------------------------------
-// LogsServiceHandler::currentlyActivatedView
-// -----------------------------------------------------------------------------
-//
-LogsServices::LogsView LogsServiceHandler::currentlyActivatedView()
-{
-    return (LogsServices::LogsView)mActivatedView;
-}
-
-// -----------------------------------------------------------------------------
 // LogsServiceHandler::isStartedUsingService
 // -----------------------------------------------------------------------------
 //
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsapp/src/logsservicehandlerold.cpp	Fri Jun 11 13:38:41 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:
+*
+*/
+//USER
+#include "logsservicehandlerold.h"
+#include "logslogger.h"
+#include "logsmainwindow.h"
+#include <xqserviceutil.h>
+
+//SYSTEM
+
+// -----------------------------------------------------------------------------
+// LogsServiceHandlerOld::LogsServiceHandlerOld
+// deprecated Use "logs.com.nokia.symbian.ILogsView" interface and 
+//            "show(int,bool,QString)" operation instead
+// -----------------------------------------------------------------------------
+//
+LogsServiceHandlerOld::LogsServiceHandlerOld(LogsMainWindow& mainWindow)
+    : XQServiceProvider(QLatin1String("com.nokia.services.logsservices.starter"),0), 
+      mMainWindow(mainWindow)
+{
+    LOGS_QDEBUG( "logs [UI] -> LogsServiceHandlerOld::LogsServiceHandlerOld()" )
+    
+    publishAll();
+    mIsAppStartedUsingService = XQServiceUtil::isService();
+    
+    LOGS_QDEBUG_2( 
+        "logs [UI] <- LogsServiceHandlerOld::LogsServiceHandlerOld(), is service",
+        mIsAppStartedUsingService )
+}
+
+// -----------------------------------------------------------------------------
+// LogsServiceHandlerOld::~LogsServiceHandlerOld
+// -----------------------------------------------------------------------------
+//
+LogsServiceHandlerOld::~LogsServiceHandlerOld()
+{
+    LOGS_QDEBUG( "logs [UI] <-> LogsServiceHandlerOld::~LogsServiceHandlerOld()" )
+}
+
+// -----------------------------------------------------------------------------
+// LogsServiceHandlerOld::start
+// -----------------------------------------------------------------------------
+//
+int LogsServiceHandlerOld::start(int activatedView, bool showDialpad)
+{
+    LOGS_QDEBUG_2( "logs [UI] -> LogsServiceHandlerOld::start(), view:", activatedView )
+    
+    if ( activatedView < LogsServices::ViewAll || 
+         activatedView > LogsServices::ViewMissed ){
+        LOGS_QDEBUG( "logs [UI] <- LogsServiceHandlerOld::start(), incorrect view" )
+        return -1;
+    }
+    mIsAppStartedUsingService = true;
+    
+    LOGS_QDEBUG( "logs [UI]     Bring app to foreground" )
+    mMainWindow.bringAppToForeground();
+    
+    emit activateView((LogsServices::LogsView)activatedView, showDialpad);
+
+    LOGS_QDEBUG( "logs [UI] <- LogsServiceHandlerOld::start()" )
+    return 0;
+}
+
+// -----------------------------------------------------------------------------
+// LogsServiceHandlerOld::startWithNum
+// -----------------------------------------------------------------------------
+//
+int LogsServiceHandlerOld::startWithNum(int activatedView, bool showDialpad, QString dialpadText)
+{
+    LOGS_QDEBUG_2( "logs [UI] -> LogsServiceHandlerOld::startWithNum(), view:", activatedView )
+    
+    Q_UNUSED(showDialpad);
+    
+    if ( activatedView < LogsServices::ViewAll || 
+         activatedView > LogsServices::ViewMissed ){
+        LOGS_QDEBUG( "logs [UI] <- LogsServiceHandlerOld::startWithNum(), incorrect view" )
+        return -1;
+    }
+    mIsAppStartedUsingService = true;
+    
+    LOGS_QDEBUG( "logs [UI]     Bring app to foreground" )
+    mMainWindow.bringAppToForeground();
+    
+    emit activateView(dialpadText);
+
+    LOGS_QDEBUG( "logs [UI] <- LogsServiceHandlerOld::startWithNum()" )
+    return 0;
+}
+
+// -----------------------------------------------------------------------------
+// LogsServiceHandlerOld::isStartedUsingService
+// -----------------------------------------------------------------------------
+//
+bool LogsServiceHandlerOld::isStartedUsingService() const
+{
+    return mIsAppStartedUsingService;
+}
+
--- a/logsui/logsapp/src/logsviewmanager.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/logsviewmanager.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -24,6 +24,7 @@
 #include "logsdefs.h"
 #include "logslogger.h"
 #include "logsservicehandler.h"
+#include "logsservicehandlerold.h"
 #include "logsmainwindow.h"
 
 //SYSTEM
@@ -33,14 +34,18 @@
 #include <QApplication>
 #include <hblineedit.h>
 #include <dialpad.h>
+#include <hbactivitymanager.h>
+#include <hbapplication.h>
 
 // -----------------------------------------------------------------------------
 // LogsViewManager::LogsViewManager
 // -----------------------------------------------------------------------------
 //
 LogsViewManager::LogsViewManager( 
-        LogsMainWindow& mainWindow, LogsServiceHandler& service ) : 
-    QObject( 0 ), mMainWindow( mainWindow ), mService( service ), 
+        LogsMainWindow& mainWindow, LogsServiceHandler& service,
+        LogsServiceHandlerOld& serviceOld ) : 
+    QObject( 0 ), mMainWindow( mainWindow ), 
+    mService( service ), mServiceOld( serviceOld ),
     mFirstActivation(true), mViewActivationShowDialpad(false)
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::LogsViewManager()" );
@@ -58,10 +63,20 @@
 
     connect( &mService, SIGNAL( activateView(QString) ), 
              this, SLOT( changeMatchesView(QString) ));
+
+    connect( &mServiceOld, SIGNAL( activateView(LogsServices::LogsView, bool) ), 
+             this, SLOT( changeRecentView(LogsServices::LogsView, bool) ) );
+
+    connect( &mServiceOld, SIGNAL( activateView(QString) ), 
+             this, SLOT( changeMatchesView(QString) ));
     
     connect( &mMainWindow, SIGNAL(appFocusGained()), this, SLOT(appFocusGained()) );
     connect( &mMainWindow, SIGNAL(appFocusLost()), this, SLOT(appFocusLost()) );
     
+    QObject::connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+
+    handleFirstActivation();
+    
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::LogsViewManager()" );
 }
 
@@ -87,11 +102,6 @@
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::initViews()" );
     
-    // Disable view switching as otherwise flick gestures change
-    // views which is not desired.
-    //Deprecated:
-    //mMainWindow.setViewSwitchingEnabled(false);
-    
     // Don't activate any view, app focus gaining or service request
     // will cause view activation
     //
@@ -129,16 +139,7 @@
 void LogsViewManager::changeMatchesView(QString dialpadText)
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::changeMatchesView()" );
-    Dialpad* dialpad = mComponentsRepository->dialpad();
-    dialpad->editor().setText(dialpadText);
-    LogsModel* model = mComponentsRepository->model();
-    if ( model && model->predictiveSearchStatus() == logsContactSearchEnabled ){
-        LOGS_QDEBUG( "logs [UI]     contact search enabled, go to macthes view" );
-        doActivateView(LogsMatchesViewId, true, QVariant());
-    } else {
-        LOGS_QDEBUG( "logs [UI]     contact search disabled, go to recent view" );
-        doActivateView(LogsRecentViewId, true, QVariant());
-    }
+    doActivateView(LogsMatchesViewId, true, QVariant(), dialpadText);
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::changeMatchesView()" );
 }
 
@@ -156,13 +157,6 @@
     foreach ( LogsBaseView* view, mViewStack ){
         disconnect( view, SIGNAL(exitAllowed()), this, SLOT(proceedExit()) );
     }
-    
-    if ( mFirstActivation && !mService.isStartedUsingService() ){
-        changeRecentView( mService.currentlyActivatedView(), false );
-        mMainWindow.bringAppToForeground();
-    }
-    
-    mComponentsRepository->model()->refreshData();
 
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::appFocusGained()" );
 }
@@ -237,10 +231,6 @@
     
     // Fake exit by sending app to background
     mMainWindow.sendAppToBackground();
-    
-    // Set application to default state (recent calls and no dialpad)
-    activateView( LogsRecentViewId, false, QVariant() );
-    mComponentsRepository->recentCallsView()->resetView();
 
     bool exitAllowed( true );
     foreach ( LogsBaseView* view, mViewStack ){
@@ -281,7 +271,7 @@
 // -----------------------------------------------------------------------------
 //
 bool LogsViewManager::doActivateView(
-        LogsAppViewId viewId, bool showDialpad, QVariant args)
+        LogsAppViewId viewId, bool showDialpad, QVariant args, const QString& dialpadText)
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::doActivateView()" );
     
@@ -289,6 +279,8 @@
     LogsBaseView* newView = 0; 
     LogsBaseView* oldView = mViewStack.count() > 0 ? mViewStack.at(0) : 0;
     
+    viewId = checkMatchesViewTransition(viewId, dialpadText);
+    
     for ( int i = 0; i < mViewStack.count(); ++i ){
         if ( mViewStack.at(i)->viewId() == viewId ){
             newView = mViewStack.takeAt(i);
@@ -347,3 +339,131 @@
     QMetaObject::invokeMethod(mMainWindow.currentView(), "handleOrientationChanged");
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::handleOrientationChanged()" );
 }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsViewManager::saveActivity()
+{
+    LOGS_QDEBUG( "logs [UI] -> LogsViewManager::saveActivity()" );
+    
+    if ( mViewStack.count() == 0 ){
+        return;
+    }
+    
+    HbActivityManager* activityManager = static_cast<HbApplication*>(qApp)->activityManager();
+    foreach ( LogsBaseView* view, mViewStack ){
+        view->clearActivity(*activityManager);
+    }
+    
+    QVariantHash metaData;
+    metaData.insert("screenshot", QPixmap::grabWidget(&mMainWindow, mMainWindow.rect()));
+    
+    QByteArray serializedActivity;
+    QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+    
+    metaData.insert( 
+        logsActivityParamShowDialpad, mComponentsRepository->dialpad()->isOpen() );
+    metaData.insert( 
+        logsActivityParamDialpadText, mComponentsRepository->dialpad()->editor().text() );
+    QString activityId = mViewStack.at(0)->saveActivity(stream, metaData);
+    
+    // add the activity to the activity manager
+    bool ok = activityManager->addActivity(activityId, serializedActivity, metaData);
+    if ( !ok ){
+        LOGS_QDEBUG( "logs [UI] activity adding failed" );
+    }
+    LOGS_QDEBUG( "logs [UI] <- LogsViewManager::saveActivity()" );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+bool LogsViewManager::loadActivity()
+{
+    LOGS_QDEBUG( "logs [UI] -> LogsViewManager::loadActivity()" );
+    bool loaded = false;
+    HbApplication* hbApp = static_cast<HbApplication*>(qApp);
+    QString activityId = hbApp->activateId();
+    LOGS_QDEBUG_2( "logs [UI] activity id:", activityId );
+    bool ok = hbApp->activityManager()->waitActivity();
+    if ( !ok ){
+        LOGS_QDEBUG( "logs [UI] Activity reschedule failed" );
+    }
+    
+    LogsBaseView* matchingView = 0;
+    for ( int i = 0; i < mViewStack.count() && !matchingView; i++ ){
+        if ( mViewStack.at(i)->matchWithActivityId(activityId) ){
+            matchingView =  mViewStack.at(i);
+        }
+    }
+    
+    if ( matchingView ){
+        // Should have only one param hash in the list, use first always
+        QList<QVariantHash> allParams = hbApp->activityManager()->activities();  
+        QVariantHash params = allParams.isEmpty() ? QVariantHash() : allParams.at(0);
+        LOGS_QDEBUG_2( "logs [UI] Activity params", params );
+        bool showDialpad = params.value(logsActivityParamShowDialpad).toBool();
+        QString dialpadText = params.value(logsActivityParamDialpadText).toString();
+        
+        QByteArray serializedActivity = hbApp->activateData().toByteArray();
+        QDataStream stream(&serializedActivity, QIODevice::ReadOnly);
+        
+        QVariant args = matchingView->loadActivity(activityId, stream, params);
+        loaded = doActivateView( matchingView->viewId(), showDialpad, args, dialpadText );
+    }
+    LOGS_QDEBUG_2( "logs [UI] <- LogsViewManager::loadActivity() loaded:", loaded );
+    return loaded;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsAppViewId LogsViewManager::checkMatchesViewTransition(
+    LogsAppViewId viewId, const QString& dialpadText)
+{
+    if ( !dialpadText.isEmpty() ){
+        Dialpad* dialpad = mComponentsRepository->dialpad();
+        dialpad->editor().setText(dialpadText);
+    }
+    
+    if ( viewId == LogsMatchesViewId ){
+        LogsModel* model = mComponentsRepository->model();
+        if ( model && model->predictiveSearchStatus() != logsContactSearchEnabled ){
+            LOGS_QDEBUG( "logs [UI]     contact search disabled, go to recent view" );
+            viewId = LogsRecentViewId;
+        }
+    }
+    return viewId;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsViewManager::handleFirstActivation()
+{      
+    LOGS_QDEBUG( "logs [UI] -> LogsViewManager::handleFirstActivation()" );
+    bool useSavedActivity( static_cast<HbApplication*>(qApp)->activateReason() == 
+            Hb::ActivationReasonActivity );
+    
+    if ( useSavedActivity && loadActivity() ){
+        LOGS_QDEBUG( "logs [UI] loaded saved activity" );    
+        mMainWindow.bringAppToForeground();
+    } else if ( mFirstActivation && !mService.isStartedUsingService() && 
+                !mServiceOld.isStartedUsingService()) {
+        changeRecentView( LogsServices::ViewAll, false );
+        mMainWindow.bringAppToForeground();
+    }
+
+    // Clear previously stored activations
+
+    HbActivityManager* activityManager = static_cast<HbApplication*>(qApp)->activityManager();
+    foreach ( LogsBaseView* view, mViewStack ){
+        view->clearActivity(*activityManager);
+    }
+    LOGS_QDEBUG( "logs [UI] <- LogsViewManager::handleFirstActivation()" );
+}
--- a/logsui/logsapp/src/main.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/src/main.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -18,6 +18,7 @@
 #include "logsmainwindow.h"
 #include "logsviewmanager.h"
 #include "logsservicehandler.h"
+#include "logsservicehandlerold.h"
 #include "logslogger.h"
 #include "logsdefs.h"
 
@@ -26,39 +27,16 @@
 #include <hbmainwindow.h>
 #include <hbapplication.h>
 #include <hbstyleloader.h>
-#include <QTranslator>
+#include <hbtranslator.h>
 
 int main(int argc, char *argv[])
 {
     LOGS_QDEBUG( "logs [UI] -> main()" )
   
-    HbApplication app(argc, argv);
+    HbApplication app(argc, argv, Hb::NoSplash);
     LogsMainWindow window;
-    
-    QString lang = QLocale::system().name();
-    QString path = "z:/resource/qt/translations/";
-    //Load common translator
-    QTranslator commontranslator;
-    bool returncode = false;
-    LOGS_QDEBUG("logs [UI] loading common strings translator");
-    returncode = commontranslator.load( path + "common_" + lang);
-    if (returncode==false) {
-    	LOGS_QDEBUG("logs [UI] unable to open file: " + path + "common_" + lang);
-    } else {
-        app.installTranslator(&commontranslator);
-    }
-    
-    //Load application-specific translator
-    QTranslator translator;
-    LOGS_QDEBUG("logs [UI] loading application strings translator");
-    LOGS_QDEBUG("logs [UI] translation filename dialer_" + lang);
-    returncode = translator.load( path + "dialer_" + lang);
-    if (returncode==false) {
-    	LOGS_QDEBUG( "logs [UI] .qm file not found from  " + path);
-    } else {
-    	LOGS_QDEBUG( "logs [UI] .qm loaded successfully from " + path);
-        app.installTranslator(&translator);    
-    }
+    HbTranslator translator("dialer");
+    translator.loadCommon();
 
     HbStyleLoader::registerFilePath(":/logslayouts");
     
@@ -67,7 +45,8 @@
     // This can cause problem of service request not coming through if
     // HbApplication creation takes long time.
     LogsServiceHandler service(window);
-    LogsViewManager viewManager(window, service);
+    LogsServiceHandlerOld serviceOld(window);
+    LogsViewManager viewManager(window, service, serviceOld);
     
     // Don't show window yet as app might be started at background
     int err = app.exec();
--- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsbaseview.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsbaseview.h	Fri Jun 11 13:38:41 2010 +0300
@@ -85,6 +85,10 @@
     void testDeleteEvent();
     void testDeleteEventOkAnswer();
     void testAskConfirmation();
+    void testMatchWithActivityId();
+    void testSaveActivity();
+    void testLoadActivity();
+    void testClearActivity();
     
 private:
  
--- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsdetailsview.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsdetailsview.h	Fri Jun 11 13:38:41 2010 +0300
@@ -65,6 +65,8 @@
     void testUpdateWidgetsSizeAndLayout();
     void testDialpadEditorTextChanged();
     void testSendMessage();
+    void testSaveActivity();
+    void testLoadActivity();
     
 private:
  
--- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsrecentcallsview.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsrecentcallsview.h	Fri Jun 11 13:38:41 2010 +0300
@@ -54,7 +54,6 @@
     void testInitView();
     void testActivated();
     void testDeactivated();
-    void testResetView();
     void testInitListWidget();
     void testUpdateFilter();
     void testUpdateViewName();
@@ -84,6 +83,8 @@
     void testIsExitAllowed();
     void testContactSearch();
     void testDialpadOpened();
+    void testSaveActivity();
+    void testLoadActivity();
     
 private: //helper functions
     
--- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsservicehandler.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsservicehandler.h	Fri Jun 11 13:38:41 2010 +0300
@@ -21,6 +21,7 @@
 #include <QObject>
 
 class LogsServiceHandler;
+class LogsServiceHandlerOld;
 
 class LogsViewManager;
 class LogsMainWindow;
@@ -51,12 +52,17 @@
 private slots: //test methods
      
     void testConstructor();
+    //test functions for old service handler
     void testStart();
     void testStartWithNum();
     
+    //test functions for new service handler
+    void testShow();
+    
 private:
  
     LogsServiceHandler* mService;
+    LogsServiceHandlerOld* mServiceOld;
     LogsMainWindow* mMainWindow;
     LogsViewManager* mLogsViewManager;
 };
--- a/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsviewmanager.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/inc/ut_logsviewmanager.h	Fri Jun 11 13:38:41 2010 +0300
@@ -23,6 +23,8 @@
 class HbMainWindow;
 class LogsViewManager;
 class LogsMainWindow;
+class LogsServiceHandler;
+class LogsServiceHandlerOld;
 
 class UT_LogsViewManager : public QObject
 {
@@ -56,11 +58,16 @@
     void testStartingWithService();
     void testHandleOrientationChanged();
     void testCompleteViewActivation();
+    void testSaveActivity();
+    void testLoadActivity();
     
 private:
  
     LogsMainWindow* mMainWindow;
     LogsViewManager* mLogsViewManager;
+    
+    LogsServiceHandler* mService;
+    LogsServiceHandlerOld* mServiceOld;
 };
 
 #endif //UT_LOGSVIEWMANAGER_H
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -87,6 +87,16 @@
 }
 
 // -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsEvent LogsDetailsModel::getLogsEvent() const
+{
+    return *mEvent;
+}
+
+
+// -----------------------------------------------------------------------------
 // LogsDetailsModel::rowCount
 // From QAbstractListModel
 // -----------------------------------------------------------------------------
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsdetailsmodel.h	Fri Jun 11 13:38:41 2010 +0300
@@ -44,6 +44,7 @@
     ~LogsDetailsModel();
     void clearEvent();
     void getNumberToClipboard();
+    LogsEvent getLogsEvent() const;
     
 public: // From QAbstractItemModel
     
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsevent.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsevent.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -86,6 +86,27 @@
 }
 
 // ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+LogsEvent::LogsEvent( QDataStream& serializedEvent )
+{
+    serializedEvent >> mLogId;
+    mLogsEventData = 0;
+}
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+bool LogsEvent::serialize( QDataStream& serializeDestination )
+{
+    serializeDestination << mLogId;
+
+    return true;
+}
+
+// ----------------------------------------------------------------------------
 // LogsEvent::initializeEventL
 // ----------------------------------------------------------------------------
 //
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsevent.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsevent.h	Fri Jun 11 13:38:41 2010 +0300
@@ -27,6 +27,7 @@
 class LogsEventData;
 class LogsEventStrings;
 class CLogEvent;
+class QDataStream;
 
 // CLASS DECLARATION
 
@@ -181,6 +182,10 @@
          */
         QString getNumberForCalling();
         
+        LogsEvent( QDataStream& serializedEvent );
+        
+        bool serialize( QDataStream& serializeDestination );
+        
     private:                               
 
         bool setTime( const QDateTime& time );
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmatchesmodel.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -34,7 +34,7 @@
 {
     LOGS_QDEBUG( "logs [ENG] -> LogsMatchesModel::LogsMatchesModel()" )    
     mDbConnector = &dbConnector;
-    mLastCall = QString();
+    mLastCall = QString("constructor");
     mTextData.append( "firstitem" );
     
     LOGS_QDEBUG( "logs [ENG] <- LogsMatchesModel::LogsMatchesModel()" )
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -87,6 +87,15 @@
 }
 
 // -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsDetailsModel* LogsModel::logsDetailsModel(LogsEvent& event)
+{
+    return new LogsDetailsModel();
+}
+
+// -----------------------------------------------------------------------------
 // LogsModel::markEventsSeen
 // -----------------------------------------------------------------------------
 //
--- a/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/logsengine_stub/logsmodel.h	Fri Jun 11 13:38:41 2010 +0300
@@ -24,6 +24,7 @@
 
 class LogsMatchesModel;
 class LogsConfigurationParams;
+class LogsDetailsModel;
 
 /**
  * 
@@ -58,6 +59,7 @@
     int refreshData();
     int compressData();
 	int updateConfiguration(LogsConfigurationParams& params);
+	LogsDetailsModel* logsDetailsModel(LogsEvent& event);
 
 public: // From QAbstractItemModel
     
--- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -38,6 +38,8 @@
 #include <hblistviewitem.h>
 #include <hblistview.h>
 #include <QStringListModel>
+#include <hbapplication.h>
+#include <hbactivitymanager.h>
 
 void UT_LogsBaseView::initTestCase()
 {
@@ -69,7 +71,6 @@
 void UT_LogsBaseView::testConstructor()
 {
     QVERIFY( mBaseView );
-    QVERIFY( mBaseView->mSoftKeyBackAction );
     QVERIFY( !mBaseView->mShowFilterMenu );
     QVERIFY( !mBaseView->mInitialized );
     QVERIFY( mBaseView->mActionMap.isEmpty() );
@@ -529,6 +530,44 @@
     // Receiver and slots specified
     HbStubHelper::reset();
     mBaseView->askConfirmation(QLatin1String("heading"), QLatin1String("text"), this,
-            SLOT(""), SLOT(""));
+            SLOT("dummy()"), SLOT("dummy()"));
     QVERIFY( HbStubHelper::dialogShown() );
 }
+
+void UT_LogsBaseView::testMatchWithActivityId()
+{
+    QVERIFY( !mBaseView->matchWithActivityId(QString("")) );
+    QVERIFY( !mBaseView->matchWithActivityId(QString("somedummy")) );
+    mBaseView->mActivities.append( "testActivity1" );
+    mBaseView->mActivities.append( "testActivity2" );
+    QVERIFY( !mBaseView->matchWithActivityId(QString("")) );
+    QVERIFY( !mBaseView->matchWithActivityId(QString("somedummy")) );
+    QVERIFY( mBaseView->matchWithActivityId(QString("testActivity2")) );   
+}
+
+void UT_LogsBaseView::testSaveActivity()
+{
+    QDataStream serializedActivity; 
+    QVariantHash metaData;
+    QVERIFY( mBaseView->saveActivity(serializedActivity, metaData).isEmpty() );
+    mBaseView->mActivities.append( "testActivity1" );
+    QVERIFY( mBaseView->saveActivity(serializedActivity, metaData) == QString("testActivity1") );
+}
+
+void UT_LogsBaseView::testLoadActivity()
+{
+    QDataStream serializedActivity; 
+    QVariantHash metaData;
+    QVERIFY( mBaseView->loadActivity(QString("dummy"), serializedActivity, metaData).isNull() );
+}
+
+void UT_LogsBaseView::testClearActivity()
+{
+    HbStubHelper::reset();
+    HbActivityManager* manager = static_cast<HbApplication*>(qApp)->activityManager();
+    manager->addActivity("someact", QVariant(), QVariantHash());
+    QCOMPARE( manager->activities().count(), 1 );
+    mBaseView->mActivities.append( "testActivity1" );
+    mBaseView->clearActivity(*manager);
+    QCOMPARE( manager->activities().count(), 0 );
+}
--- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsdetailsview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsdetailsview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -68,9 +68,9 @@
 void UT_LogsDetailsView::testConstructor()
 {
     QVERIFY(mDetailsView);
-    QVERIFY(mDetailsView->mSoftKeyBackAction);
     QVERIFY(mDetailsView->viewId() == LogsDetailsViewId );
     QVERIFY(!mDetailsView->mDetailsModel);
+    QCOMPARE( mDetailsView->mActivities.at(0), QString(logsActivityIdViewDetails) );
 }
 
 void UT_LogsDetailsView::testActivated()
@@ -339,3 +339,33 @@
     QVERIFY( !LogsMessage::isDefaultMessageSent() );
     QVERIFY( LogsMessage::isMessageSent() );
 }
+
+void UT_LogsDetailsView::testSaveActivity()
+{
+    QByteArray serializedActivity;
+    int sizeBefore = serializedActivity.size();
+    QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+    QVariantHash metaData;
+    QVERIFY( mDetailsView->saveActivity(stream, metaData) == QString(logsActivityIdViewDetails) );
+    QVERIFY(serializedActivity.size() == sizeBefore); // Event not serialized as no model
+    
+    mDetailsView->mDetailsModel = new LogsDetailsModel();
+    mDetailsView->mDetailsModel->mEvent = new LogsEvent;
+    QVERIFY( mDetailsView->saveActivity(stream, metaData) == QString(logsActivityIdViewDetails) );
+    QVERIFY(serializedActivity.size() > sizeBefore); // Event serialized
+    
+}
+
+void UT_LogsDetailsView::testLoadActivity()
+{
+    QByteArray serializedActivity;
+    QDataStream stream(&serializedActivity, QIODevice::ReadWrite | QIODevice::Append);
+    LogsEvent event;
+    event.serialize(stream);
+    QVariantHash metaData;
+    QVariant args = mDetailsView->loadActivity(QString(logsActivityIdViewDetails), stream, metaData);
+    QVERIFY( !args.isNull() );
+    LogsDetailsModel* model = qVariantValue<LogsDetailsModel*>(args);
+    QVERIFY( model != 0 );
+    delete model;
+}
--- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsmatchesview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsmatchesview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -70,6 +70,7 @@
     QVERIFY( mMatchesView->mActionMap.count() == 0 );
     QVERIFY( mMatchesView->mLayoutSectionName == "" );
     QVERIFY( !mMatchesView->mAddToContactsButton );
+    QCOMPARE( mMatchesView->mActivities.at(0), QString(logsActivityIdViewMatches) );
 }
 
 void UT_LogsMatchesView::testActivated()
@@ -104,23 +105,26 @@
     //Pass model as input arg
     LogsDbConnector* dbConnector = 0;
     LogsMatchesModel* model1 = new LogsMatchesModel(*dbConnector);
+    model1->resetLastCall();
     QVariant arg = qVariantFromValue( model1 );
     mMatchesView->activated( true, arg );
     QVERIFY( mMatchesView->mListView );
-    QVERIFY( mMatchesView->mModel == model1 );  
+    QVERIFY( mMatchesView->mModel == model1 );
+    QVERIFY( mMatchesView->mModel->mLastCall.isEmpty() );
     
     LogsMatchesModel* model2 = new LogsMatchesModel(*dbConnector);
+    model2->resetLastCall();
     QVariant arg2 = qVariantFromValue( model2 );
     mMatchesView->activated( true, arg2 );
     QVERIFY( mMatchesView->mListView );
     QVERIFY( mMatchesView->mModel == model2 );
+    QVERIFY( mMatchesView->mModel->mLastCall.isEmpty() );
     
     // After passing model as input arg, do not pass model
     mMatchesView->activated( true,QVariant() );
     QVERIFY( mMatchesView->mListView );
     QVERIFY( mMatchesView->mModel );
-    QVERIFY( mMatchesView->mModel != model1 );
-    QVERIFY( mMatchesView->mModel != model2 );
+    QVERIFY( mMatchesView->mModel->mLastCall == QLatin1String("constructor") );
 }
 
 
--- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsrecentcallsview.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsrecentcallsview.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -94,6 +94,11 @@
     QVERIFY( mRecentCallsView->mCurrentView == LogsServices::ViewAll );
     QVERIFY( mRecentCallsView->viewId() == LogsRecentViewId );
     QVERIFY( mRecentCallsView->mLayoutSectionName == "" );
+    QCOMPARE( mRecentCallsView->mActivities.at(LogsServices::ViewAll), QString(logsActivityIdViewRecent) );
+    QCOMPARE( mRecentCallsView->mActivities.at(LogsServices::ViewReceived), QString(logsActivityIdViewReceived) );
+    QCOMPARE( mRecentCallsView->mActivities.at(LogsServices::ViewCalled), QString(logsActivityIdViewCalled) );
+    QCOMPARE( mRecentCallsView->mActivities.at(LogsServices::ViewMissed), QString(logsActivityIdViewMissed) );
+    
 }
 
 void UT_LogsRecentCallsView::testInitView()
@@ -145,14 +150,14 @@
     
     view->mViewManager.mainWindow().setOrientation( Qt::Horizontal );
     view->mDialpad->editor().setText( QString("hello") );
-    view->mResetted = true;
+    view->mFirstActivation = true;
     view->activated(false, QVariant(LogsServices::ViewAll));
     QVERIFY( view->mFilter->filterType() == LogsFilter::All );  
     VERIFY_CHECKED_ACTION( view, logsShowFilterRecentMenuActionId )
     QVERIFY( !view->mDialpad->editor().text().isEmpty() );
     QVERIFY( view->mListView->layoutName() == logsListLandscapeLayout );
     QVERIFY( view->mLayoutSectionName == logsViewDefaultSection );
-    QVERIFY( !view->mResetted );
+    QVERIFY( !view->mFirstActivation );
 }
 
 void UT_LogsRecentCallsView::testDeactivated()
@@ -160,14 +165,6 @@
     mRecentCallsView->deactivated();
 }
 
-void UT_LogsRecentCallsView::testResetView()
-{
-    // Opened dialpad is closed and text in it is cleared
-    QVERIFY( !mRecentCallsView->mResetted );
-    mRecentCallsView->resetView();
-    QVERIFY( mRecentCallsView->mResetted );
-}
-
 void UT_LogsRecentCallsView::testInitListWidget()
 {
     //TODO:Q_ASSERT_X
@@ -204,6 +201,7 @@
     mRecentCallsView->mListView = 0;
             
     //filter is updated with a new one, missed calls marking as seen is started (by timer)
+    mRecentCallsView->mFirstActivation = false;
     QVERIFY( mRecentCallsView->mFilter );
     mRecentCallsView->mListView = new HbListView();
     mRecentCallsView->updateFilter(LogsFilter::Missed);
@@ -214,9 +212,9 @@
     mRecentCallsView->mListView = 0;
     
     //filter is updated with a new one, missed calls marking as seen is not started
-    //as view was resetted
+    //as this is first view activation
     HbStubHelper::reset();
-    mRecentCallsView->mResetted = true;
+    mRecentCallsView->mFirstActivation = true;
     mRecentCallsView->mListView = new HbListView();
     mRecentCallsView->updateFilter(LogsFilter::Missed);
     QVERIFY( mRecentCallsView->mFilter );
@@ -931,3 +929,28 @@
     mRecentCallsView->dialpadOpened();
     QVERIFY( mViewManager->mViewId == LogsUnknownViewId );
 }
+
+void UT_LogsRecentCallsView::testSaveActivity()
+{
+    QByteArray serializedActivity;
+    QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+    QVariantHash metaData;
+    mRecentCallsView->mCurrentView = LogsServices::ViewMissed;
+    QVERIFY( mRecentCallsView->saveActivity(stream, metaData) == QString(logsActivityIdViewMissed) );
+    mRecentCallsView->mCurrentView = LogsServices::ViewAll;
+    QVERIFY( mRecentCallsView->saveActivity(stream, metaData) == QString(logsActivityIdViewRecent) );
+
+}
+
+void UT_LogsRecentCallsView::testLoadActivity()
+{
+    QByteArray serializedActivity;
+    QDataStream stream(&serializedActivity, QIODevice::ReadOnly);
+    QVariantHash metaData;
+    QVariant args = mRecentCallsView->loadActivity(QString(logsActivityIdViewCalled), stream, metaData);
+    QVERIFY( !args.isNull() );
+    QVERIFY( args.toInt() == LogsServices::ViewCalled );
+    QVariant args2 = mRecentCallsView->loadActivity(QString(logsActivityIdViewMissed), stream, metaData);
+    QVERIFY( !args2.isNull() );
+    QVERIFY( args2.toInt() == LogsServices::ViewMissed);
+}
--- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsservicehandler.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsservicehandler.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -18,12 +18,14 @@
 //USER
 #include "ut_logsservicehandler.h"
 #include "logsservicehandler.h"
+#include "logsservicehandlerold.h"
 #include "qthighway_stub_helper.h"
 #include "ut_logsviewmanager.h"
 #include "logsviewmanager.h"
 #include "logsmainwindow.h"
 #include "logscomponentrepository.h"
 #include "logsmatchesview.h"
+#include "logsdefs.h"
 
 //SYSTEM
 #include <QtTest/QtTest>
@@ -43,8 +45,9 @@
 {
     mMainWindow =  new LogsMainWindow();
     mService = new LogsServiceHandler(*mMainWindow);
+    mServiceOld = new LogsServiceHandlerOld(*mMainWindow);
     
-    mLogsViewManager = new LogsViewManager(*mMainWindow, *mService);
+    mLogsViewManager = new LogsViewManager(*mMainWindow, *mService, *mServiceOld);
     
 }
 
@@ -52,6 +55,8 @@
 {
     delete mService;
     mService = 0;
+    delete mServiceOld;
+    mServiceOld = 0;
     delete mMainWindow;
     mMainWindow = 0;
     delete mLogsViewManager;
@@ -65,43 +70,101 @@
     QVERIFY( mService );
     QVERIFY( !mService->mIsAppStartedUsingService );
     QVERIFY( !mService->isStartedUsingService() );
+
+    QVERIFY( mServiceOld );
+    QVERIFY( !mServiceOld->mIsAppStartedUsingService );
+    QVERIFY( !mServiceOld->isStartedUsingService() );
+
     
     QtHighwayStubHelper::setIsService(true);
     LogsServiceHandler serviceHandler(*mMainWindow);
     QVERIFY( serviceHandler.mIsAppStartedUsingService );
     QVERIFY( serviceHandler.isStartedUsingService() );
     
+    LogsServiceHandlerOld serviceHandlerOld(*mMainWindow);
+    QVERIFY( serviceHandlerOld.mIsAppStartedUsingService );
+    QVERIFY( serviceHandlerOld.isStartedUsingService() );
 }
 
 void UT_LogsServiceHandler::testStart()
 {
     qRegisterMetaType< LogsServices::LogsView >("LogsServices::LogsView");
-    QSignalSpy spy(mService, SIGNAL(activateView(LogsServices::LogsView, bool)));
+    QSignalSpy spy(mServiceOld, SIGNAL(activateView(LogsServices::LogsView, bool)));
      
     // Wrong view
-    QVERIFY( mService->start( 9999, true ) != 0 );
+    QVERIFY( mServiceOld->start( 9999, true ) != 0 );
     QVERIFY( spy.count() == 0 );
 
     // Correct view
-    mService->mMainWindow.mForeground = false;
-    QVERIFY( mService->start( (int)LogsServices::ViewReceived, true  ) == 0 );
+    mServiceOld->mMainWindow.mForeground = false;
+    QVERIFY( mServiceOld->start( (int)LogsServices::ViewReceived, true  ) == 0 );
     QVERIFY( spy.count() == 1 );
     LogsServices::LogsView view = 
         qvariant_cast< LogsServices::LogsView >(spy.at(0).at(0));
     QVERIFY( view == LogsServices::ViewReceived );
-    QVERIFY( mService->currentlyActivatedView() == LogsServices::ViewReceived  );
-    QVERIFY( mService->mMainWindow.mForeground );  
+    QVERIFY( mServiceOld->mMainWindow.mForeground );  
 }
 
 void UT_LogsServiceHandler::testStartWithNum()
 {
     qRegisterMetaType< LogsServices::LogsView >("LogsServices::LogsView");
-    QSignalSpy spy2(mService, SIGNAL(activateView(QString)));
+    QSignalSpy spy2(mServiceOld, SIGNAL(activateView(QString)));
 
-    mService->mMainWindow.mForeground = false;
-    QVERIFY( mService->startWithNum( (int)LogsServices::ViewReceived, true,
+    mServiceOld->mMainWindow.mForeground = false;
+    QVERIFY( mServiceOld->startWithNum( (int)LogsServices::ViewReceived, true,
             QString("+123456")  ) == 0 );
     QVERIFY( spy2.count() == 1 );
     QVERIFY( spy2.at(0).at(0).toString() == QString("+123456"));
-    QVERIFY( mService->mMainWindow.mForeground );  
+    QVERIFY( mServiceOld->mMainWindow.mForeground );  
 }
+
+void UT_LogsServiceHandler::testShow()
+{
+    qRegisterMetaType< LogsServices::LogsView >("LogsServices::LogsView");
+    QSignalSpy spy(mService, SIGNAL(activateView(LogsServices::LogsView, bool)));
+    QSignalSpy spy2(mService, SIGNAL(activateView(QString)));
+    QVariantMap map;
+
+    // Wrong view
+    map.insert(logsViewIndexParam, QVariant(9999));
+    QVERIFY( mService->show(map) != 0 );
+    QVERIFY( spy.count() == 0 );
+    QVERIFY( spy2.count() == 0 );
+    
+    // Correct view, dialpad text is empty
+    map.clear();
+    map.insert(logsViewIndexParam, QVariant((int)LogsServices::ViewReceived));
+    mService->mMainWindow.mForeground = false;
+    QVERIFY( mService->show(map) == 0 );
+    QVERIFY( spy.count() == 1 );
+    QVERIFY( spy2.count() == 0 );
+    LogsServices::LogsView view = 
+            qvariant_cast< LogsServices::LogsView >(spy.at(0).at(0));
+    QVERIFY( view == LogsServices::ViewReceived );
+    QVERIFY( mServiceOld->mMainWindow.mForeground );
+    
+    // Correct view, dialpad text not empty
+    spy.clear();
+    map.clear();
+    map.insert(logsViewIndexParam, QVariant((int)LogsServices::ViewReceived));
+    map.insert(logsDialpadTextParam, QVariant(QString("+123456")));
+    mService->mMainWindow.mForeground = false;
+    QVERIFY( mService->show(map) == 0 );
+    QVERIFY( spy.count() == 0 );
+    QVERIFY( spy2.count() == 1 );
+    QVERIFY( spy2.at(0).at(0).toString() == QString("+123456"));
+    QVERIFY( mServiceOld->mMainWindow.mForeground );
+    
+    // Some completly dummy parameters or no params at all
+    spy.clear();
+    spy2.clear();
+    map.clear();
+    map.insert("dummy_param", QVariant(666));
+    mService->mMainWindow.mForeground = false;
+    QVERIFY( mService->show(map) == 0 );
+    QVERIFY( spy.count() == 1 );
+    QVERIFY( spy2.count() == 0 );
+    view = qvariant_cast< LogsServices::LogsView >(spy.at(0).at(0));
+    QVERIFY( view == LogsServices::ViewAll );
+    QVERIFY( mServiceOld->mMainWindow.mForeground );
+}
--- a/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsviewmanager.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/src/ut_logsviewmanager.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -19,6 +19,7 @@
 #include "ut_logsviewmanager.h"
 #include "logsviewmanager.h"
 #include "logsservicehandler.h"
+#include "logsservicehandlerold.h"
 #include "logsmainwindow.h"
 #include "logscomponentrepository.h"
 #include "logsrecentcallsview.h"
@@ -31,10 +32,11 @@
 #include <QtTest/QtTest>
 #include <HbView.h>
 #include <hbapplication.h>
+#include <hbactivitymanager.h>
+#include <dialpad.h>
 
 void UT_LogsViewManager::initTestCase()
 {
-    //mMainWindow =  new LogsMainWindow();
 }
 
 void UT_LogsViewManager::cleanupTestCase()
@@ -45,14 +47,19 @@
 void UT_LogsViewManager::init()
 {
     mMainWindow =  new LogsMainWindow();
-    LogsServiceHandler* service = new LogsServiceHandler(*mMainWindow);
-    mLogsViewManager = new LogsViewManager(*mMainWindow, *service);
+    mService = new LogsServiceHandler(*mMainWindow);
+    mServiceOld = new LogsServiceHandlerOld(*mMainWindow);
+    mLogsViewManager = new LogsViewManager(*mMainWindow, *mService, *mServiceOld);
 }
 
 void UT_LogsViewManager::cleanup()
 {
     delete mLogsViewManager;
     mLogsViewManager = 0;
+    delete mService;
+    mService = 0;
+    delete mServiceOld;
+    mServiceOld = 0;
     delete mMainWindow;
     mMainWindow = 0;
 }
@@ -61,14 +68,23 @@
 {
     QVERIFY( mLogsViewManager );
     QVERIFY( mLogsViewManager->mComponentsRepository );
-    QVERIFY( mLogsViewManager->mMainWindow.viewCount() == 3 );
-    QVERIFY( mLogsViewManager->mMainWindow.currentView() == 0 );
+    QVERIFY( mLogsViewManager->mMainWindow.views().count() == 3 );
+    QVERIFY( mLogsViewManager->mMainWindow.currentView() != 0 );
+    QVERIFY( static_cast<LogsBaseView*>( mLogsViewManager->mMainWindow.currentView() )->viewId() == LogsRecentViewId );
     QVERIFY( mLogsViewManager->mViewStack.count() == 3 );
     
     delete mLogsViewManager;
     mLogsViewManager = 0;
-    //TODO: removeView deprecated => this will fail
-    //QVERIFY( mMainWindow->viewCount() == 0 );
+    
+    // Contructor when activity restoring started the app
+    HbStubHelper::setActivityReason(Hb::ActivationReasonActivity);
+    mLogsViewManager = new LogsViewManager(*mMainWindow, *mService, *mServiceOld);
+    QVERIFY( mLogsViewManager->mComponentsRepository );
+    QVERIFY( mLogsViewManager->mMainWindow.currentView() != 0 );
+    QVERIFY( static_cast<LogsBaseView*>( mLogsViewManager->mMainWindow.currentView() )->viewId() == LogsMatchesViewId );
+    QVERIFY( mLogsViewManager->mViewStack.count() == 3 );
+    HbStubHelper::reset();
+
 }
 
 void UT_LogsViewManager::testActivateView()
@@ -76,13 +92,13 @@
     // Activate already active view
     QVERIFY( mLogsViewManager->activateView(LogsRecentViewId) );
     QVERIFY( mLogsViewManager->activateView(LogsRecentViewId) );
-    QVERIFY( mLogsViewManager->mMainWindow.viewCount() == 3 );
+    QCOMPARE( mLogsViewManager->mMainWindow.views().count(), 3 );
     QVERIFY( mLogsViewManager->mMainWindow.currentView() == 
              mLogsViewManager->mComponentsRepository->recentCallsView() );
     
     // Activate other view
     QVERIFY( mLogsViewManager->activateView(LogsDetailsViewId) );
-    QVERIFY( mLogsViewManager->mMainWindow.viewCount() == 3 );
+    QVERIFY( mLogsViewManager->mMainWindow.views().count() == 3 );
     QVERIFY( mLogsViewManager->mMainWindow.currentView() == 
              mLogsViewManager->mComponentsRepository->detailsView() );
     QVERIFY( mLogsViewManager->mViewStack.at(0) == 
@@ -90,7 +106,7 @@
     
     // Try to activate unknown view
     QVERIFY( !mLogsViewManager->activateView(LogsUnknownViewId) );
-    QVERIFY( mLogsViewManager->mMainWindow.viewCount() == 3 );
+    QVERIFY( mLogsViewManager->mMainWindow.views().count() == 3 );
     QVERIFY( mLogsViewManager->mMainWindow.currentView() == 
              mLogsViewManager->mComponentsRepository->detailsView() );
     QVERIFY( mLogsViewManager->mViewStack.at(0) == 
@@ -98,7 +114,7 @@
     
     // Go back to previous view
     QVERIFY( mLogsViewManager->activatePreviousView() );
-    QVERIFY( mLogsViewManager->mMainWindow.viewCount() == 3 );
+    QVERIFY( mLogsViewManager->mMainWindow.views().count() == 3 );
     QVERIFY( mLogsViewManager->mMainWindow.currentView() == 
              mLogsViewManager->mComponentsRepository->recentCallsView() );
     QVERIFY( mLogsViewManager->mViewStack.at(0) == 
@@ -157,10 +173,11 @@
     LogsMainWindow window;
     window.setCurrentView(0); // clear stub static data
     LogsServiceHandler service(*mMainWindow);
+    LogsServiceHandlerOld serviceOld(*mMainWindow);
     service.mIsAppStartedUsingService = true;
-    LogsViewManager vm(window, service);
+    LogsViewManager vm(window, service, serviceOld);
     QVERIFY( vm.mComponentsRepository );
-    QVERIFY( vm.mMainWindow.viewCount() == 3 );
+    QVERIFY( vm.mMainWindow.views().count() == 3 );
     QVERIFY( vm.mMainWindow.currentView() == 0 );
     QVERIFY( vm.mViewStack.count() == 3 );
 }
@@ -174,7 +191,7 @@
 {
     // On first activation, wait that view has painted itself once
     // before completing activation
-    QVERIFY(mLogsViewManager->mFirstActivation);
+    mLogsViewManager->mFirstActivation = true;
     mLogsViewManager->activateView(LogsRecentViewId, true, QVariant());
     QVERIFY(!mLogsViewManager->mFirstActivation);
     QVERIFY(mLogsViewManager->mViewActivationShowDialpad);
@@ -182,3 +199,65 @@
     mLogsViewManager->completeViewActivation(); // Simulate paint completion (viewReady signal)
     QVERIFY(mLogsViewManager->mComponentsRepository->model()->mMissedCallsCounterCleared);
 }
+
+void UT_LogsViewManager::testSaveActivity()
+{
+    HbStubHelper::setActivityReason(Hb::ActivationReasonActivity);
+    HbApplication* hbApp = static_cast<HbApplication*>(qApp);
+    HbActivityManager* manager = hbApp->activityManager();
+    QCOMPARE( manager->activities().count(), 0 );
+    mLogsViewManager->saveActivity();
+    QCOMPARE( manager->activities().count(), 1 );
+    QVERIFY( !manager->activities().at(0).value(logsActivityParamShowDialpad).toBool() );
+    QVERIFY( manager->activities().at(0).value(logsActivityParamDialpadText).toString().isEmpty() );
+    
+    // Make sure that only one activity is reported
+    mLogsViewManager->mComponentsRepository->dialpad()->mIsOpen = true;
+    mLogsViewManager->mComponentsRepository->dialpad()->mLineEdit->setText("12345");
+    mLogsViewManager->saveActivity();
+    QCOMPARE( manager->activities().count(), 1 );
+    QVERIFY( manager->activities().at(0).value(logsActivityParamShowDialpad).toBool() );
+    QCOMPARE( manager->activities().at(0).value(logsActivityParamDialpadText).toString(), QString("12345") );
+    
+    // No views, nothing to save
+    mLogsViewManager->mViewStack.clear();
+    mLogsViewManager->saveActivity();
+    QCOMPARE( manager->activities().count(), 1 );
+}
+
+void UT_LogsViewManager::testLoadActivity()
+{
+    mLogsViewManager->mComponentsRepository->mModel->mPredectiveSearchStatus = 1;
+    HbStubHelper::setActivityReason(Hb::ActivationReasonActivity);
+    HbApplication* hbApp = static_cast<HbApplication*>(qApp);
+    HbActivityManager* manager = hbApp->activityManager();
+    
+    // View activity loaded, no dialpad shown, nor text in it
+    HbStubHelper::setActivityId(logsActivityIdViewRecent);
+    mLogsViewManager->mComponentsRepository->dialpad()->mIsOpen = false;
+    mLogsViewManager->mComponentsRepository->dialpad()->mLineEdit->setText("");
+    QVariantHash params;
+    params.insert(logsActivityParamShowDialpad, false);
+    params.insert(logsActivityParamDialpadText, QString(""));
+    manager->addActivity(QString(), QVariant(), params);
+    QVERIFY( mLogsViewManager->loadActivity() );
+    QVERIFY( static_cast<LogsBaseView*>( mLogsViewManager->mMainWindow.currentView() )->viewId() == LogsRecentViewId );
+    QVERIFY( !mLogsViewManager->mComponentsRepository->dialpad()->mIsOpen );
+    QCOMPARE( mLogsViewManager->mComponentsRepository->dialpad()->mLineEdit->text(), QString("") );
+  
+    // Other activity loaded, show dialpad with text
+    HbStubHelper::setActivityId(logsActivityIdViewMatches);
+    manager->removeActivity(QString());
+    QVariantHash params2;
+    params2.insert(logsActivityParamShowDialpad, true);
+    params2.insert(logsActivityParamDialpadText, QString("33333"));
+    manager->addActivity(QString(), QVariant(), params2);
+    QVERIFY( mLogsViewManager->loadActivity() );
+    QVERIFY( static_cast<LogsBaseView*>( mLogsViewManager->mMainWindow.currentView() )->viewId() == LogsMatchesViewId );
+    QVERIFY( mLogsViewManager->mComponentsRepository->dialpad()->mIsOpen );
+    QCOMPARE( mLogsViewManager->mComponentsRepository->dialpad()->mLineEdit->text(), QString("33333") );
+    
+    // View activity not loaded
+    HbStubHelper::setActivityId("unknownActivity");
+    QVERIFY( !mLogsViewManager->loadActivity() );
+}
--- a/logsui/logsapp/tsrc/ut_logsapp/stubs/hbapplication.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/stubs/hbapplication.h	Fri Jun 11 13:38:41 2010 +0300
@@ -20,12 +20,20 @@
 #include <qobject.h>
 #include <qglobal.h> 
 
-class HbApplication : public QObject
+class HbActivityManager;
+
+class HbApplication : public QApplication
 {
 public:
     HbApplication(int &/*argc*/, char */*argv*/[]);
     ~HbApplication();
     
+    HbActivityManager *activityManager();
+    Hb::ActivationReason activateReason() const;
+    QVariantHash activateParams() const;
+    QString activateId() const; 
+    QVariant activateData();    
+    
     static void quit();
 };
 
--- a/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -23,7 +23,10 @@
 #include <hbmessagebox.h>
 #include <hbapplication.h>
 #include <hbcolorscheme.h>
+#include <hbview.h>
+#include <hbactivitymanager.h>
 #include <QCoreApplication>
+#include <QApplication>
 #include <QTimer>
 #include <QGesture>
 
@@ -42,6 +45,11 @@
 bool testIsWidgetOpen = false;
 bool testIsWidgetRaised = false;
 QColor testColor = Qt::white;
+QList<HbView *> testViews;
+QList<QVariantHash> testActivities;
+HbActivityManager testActivityManager;
+Hb::ActivationReason testActivationReason = Hb::ActivationReasonNormal;
+QString testActivityId = "LogsViewMatches";
 
 void HbStubHelper::reset()
 {
@@ -52,6 +60,9 @@
     testIsWidgetRaised = false;
     testDialogShown = false;
     testColor = Qt::white;
+    testActivationReason = Hb::ActivationReasonNormal;
+    testActivityId = "LogsViewMatches";
+    testActivities.clear();
 }
 
 
@@ -114,6 +125,41 @@
     testColor = col;
 }
 
+void HbStubHelper::setActivityReason(Hb::ActivationReason reason)
+{
+    testActivationReason = reason;
+}
+
+void HbStubHelper::setActivityId(QString activityId)
+{
+    testActivityId = activityId;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+QCoreApplication::QCoreApplication(int &argc, char **argv)
+{
+    
+}
+
+
+void QCoreApplication::quit()
+{
+    testQuitCalled = true; 
+}
+
+QApplication::QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv, int version) 
+: QCoreApplication(argc, argv)
+{
+    
+}
+
+QApplication::~QApplication()
+{
+    
+}
 
 bool QGraphicsWidget::close()
 {
@@ -130,11 +176,52 @@
     testIsWidgetRaised = true;
 }
 
+QPixmap QPixmap::grabWidget(QWidget *widget, const QRect &rect)
+{
+    Q_UNUSED(widget);
+    Q_UNUSED(rect);
+    return QPixmap();
+}
+
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-HbApplication::HbApplication(int &/*argc*/, char */*argv*/[]) 
+HbActivityManager::HbActivityManager(QObject *parent) : QObject(parent)
+{
+    
+}
+HbActivityManager::~HbActivityManager()
+{
+    
+}
+    
+bool HbActivityManager::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
+{
+    testActivities.append(parameters);
+}
+bool HbActivityManager::removeActivity(const QString &activityId)
+{
+    if ( !testActivities.isEmpty() ){
+        testActivities.takeFirst();
+    }
+}
+QList<QVariantHash> HbActivityManager::activities() const
+{
+    return testActivities;
+}
+
+bool HbActivityManager::waitActivity()
+{
+    return true;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+HbApplication::HbApplication(int &argc, char *argv[]) :
+    QApplication(0, argc, argv, 0) 
 {
 }
 
@@ -147,9 +234,26 @@
     testQuitCalled = true; 
 }
 
-void QCoreApplication::quit()
+HbActivityManager *HbApplication::activityManager()
+{
+    return &testActivityManager;
+}
+
+Hb::ActivationReason HbApplication::activateReason() const
 {
-    testQuitCalled = true; 
+    return testActivationReason;
+}
+QVariantHash HbApplication::activateParams() const
+{
+    return QVariantHash();
+}
+QString HbApplication::activateId() const
+{
+    return testActivityId;
+}
+QVariant HbApplication::activateData()
+{
+    return QVariant();
 }
     
 // -----------------------------------------------------------------------------
@@ -191,6 +295,7 @@
     Q_UNUSED(windowFlags)
     testViewCount = 0;
     testWindow = this;
+    testViews.clear();
 }
 
 HbMainWindow::~HbMainWindow()
@@ -211,13 +316,17 @@
 
 QRectF HbMainWindow::layoutRect() const
 {
-    return QRectF(0, 0, 100,100);
+    if (windowOrientation == Qt::Vertical) {
+        return QRectF(0, 0, 360, 640);
+    } else {
+        return QRectF(0, 0, 640, 360);
+    }
 }
 
 HbView *HbMainWindow::addView(QGraphicsWidget *widget)
 {
-    Q_UNUSED(widget)
     testViewCount++;
+    testViews.append( static_cast<HbView*>(widget) );
 }
 
 void HbMainWindow::setCurrentView(HbView *view, bool animate, Hb::ViewSwitchFlags flags)
@@ -227,10 +336,11 @@
     testView = view;
 }
 
-int HbMainWindow::viewCount() const
+QList<HbView *> HbMainWindow::views() const
 {
-    return testViewCount;
+    return testViews;
 }
+
 HbView *HbMainWindow::currentView() const
 {
     return testView;
@@ -272,16 +382,6 @@
     }
 }
 
-
-HbAction *HbDialog::exec()
-{
-    if (selectedActionString == "primary")	{
-        return primaryAction();
-    } else {
-        return 0;
-    }
-}
-
 void QTimer::singleShot(int msec, QObject *receiver, const char *member)
 {
     testSingleShotTimer = true;
--- a/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs_helper.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/stubs/hbstubs_helper.h	Fri Jun 11 13:38:41 2010 +0300
@@ -35,6 +35,8 @@
         static bool isWidgetOpen();    
         static bool isWidgetRaised();
         static void setColorScheme(QColor col);
+        static void setActivityReason(Hb::ActivationReason reason);
+        static void setActivityId(QString activityId);
 };
 
 #endif
--- a/logsui/logsapp/tsrc/ut_logsapp/ut_logsapp.pro	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsapp/tsrc/ut_logsapp/ut_logsapp.pro	Fri Jun 11 13:38:41 2010 +0300
@@ -48,6 +48,7 @@
 HEADERS += inc/ut_logseffecthandler.h
 HEADERS += inc/ut_logspageindicator.h
 HEADERS += inc/ut_logspageindicatoritem.h
+HEADERS += inc/ut_logsservicehandler.h
 HEADERS += ../../inc/logsmainwindow.h
 HEADERS += ../../inc/logsviewmanager.h
 HEADERS += ../../inc/logsrecentcallsview.h
@@ -55,12 +56,12 @@
 HEADERS += ../../inc/logsdetailsview.h
 HEADERS += ../../inc/logsmatchesview.h
 HEADERS += ../../inc/logsservicehandler.h
+HEADERS += ../../inc/logsservicehandlerold.h
 HEADERS += ../../inc/logseffecthandler.h
 HEADERS += ../../inc/logspageindicator.h
 HEADERS += ../../inc/logspageindicatoritem.h
 #HEADERS += ../../../logsengine/inc/logscommondata.h
 HEADERS += ../../../logsengine/inc/logsconfigurationparams.h
-HEADERS += inc/ut_logsservicehandler.h
 HEADERS += logsengine_stub/logscontact.h
 HEADERS += logsengine_stub/logsforegroundwatcher.h
 HEADERS += ./stubs/dialpad.h
@@ -97,6 +98,7 @@
 SOURCES += ../../src/logsdetailsview.cpp
 SOURCES += ../../src/logsmatchesview.cpp
 SOURCES += ../../src/logsservicehandler.cpp
+SOURCES += ../../src/logsservicehandlerold.cpp
 SOURCES += ../../src/logseffecthandler.cpp
 SOURCES += ../../src/logspageindicator.cpp
 SOURCES += ../../src/logspageindicatoritem.cpp
--- a/logsui/logscntfinder/src/logscntfinder.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/src/logscntfinder.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -307,13 +307,8 @@
         entry->setPhoneNumber( 
               contactPhoneNumber.value( QContactPhoneNumber::FieldNumber ) );
         QContactAvatar contactAvatar = contact.detail<QContactAvatar>();
-        QString subType = contactAvatar.value( QContactAvatar::FieldSubType );
-        QString avatar = contactAvatar.value( QContactAvatar::FieldAvatar );
-        
-        if ( subType == QLatin1String( QContactAvatar::SubTypeImage ) &&
-             !avatar.isEmpty() ) {
-            entry->setAvatarPath( avatar );
-        }
+        QString avatar = contactAvatar.value( QContactAvatar::FieldImageUrl );
+        entry->setAvatarPath( avatar );
         
         updateResult( entry );      
     }
--- a/logsui/logscntfinder/tsrc/pt_logscntfinder/inc/pt_logscntfinder.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/pt_logscntfinder/inc/pt_logscntfinder.h	Fri Jun 11 13:38:41 2010 +0300
@@ -14,23 +14,51 @@
 * Description:
 *
 */
-#ifndef UT_CNTPREFILTERING_H
-#define UT_CNTPREFILTERING_H
+#ifndef PT_LOGSCNTFINDER_H
+#define PT_LOGSCNTFINDER_H
 
 #include <QObject>
 #include <qcontactmanager.h>
 
 QTM_USE_NAMESPACE
-
 class LogsCntFinder;
 
+class PtTest
+{
+public:
+    
+    PtTest( const QString& name );
+    void execute( LogsCntFinder& engine );
+    void execute( QContactManager& manager );
+    void calculateMean();
+    void calculateVariance();
+    void calculateDeviation();
+    void print();
+    static QString statHeader(); 
+    
+public:
+    
+    QString mPattern;
+    QList<int> mSamples;
+    float mMean;
+    float mVariance;
+    float mStdDeviation;
+    int mMin;
+    int mMax;
+    int mMinSample;
+    int mMaxSample;
+    int mResults;
 
-class pt_LogsCntFinder : public QObject                 
+};
+
+
+
+class PT_LogsCntFinder : public QObject                 
 {
      Q_OBJECT
 public:
      
-     inline pt_LogsCntFinder( int samples ) : mSamples(samples) {}
+     inline PT_LogsCntFinder( int samples ) : mSamples(samples) {}
      
 private slots:
 
@@ -57,11 +85,8 @@
     void statistics();
 
 private:
-    void createContacts();
     void createContact_one_Contact(QString& firstname, QString& Lastname, QString phnumber);
     
-    QContactFilter::MatchFlags flag(int f);
-    
 private:
     
     QContactManager             *m_manager;
@@ -70,4 +95,4 @@
 };
 
 
-#endif //UT_CNTSPREFILTERING_H
+#endif //PT_LOGSCNTFINDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/pt_logscntfinder/inc/pt_logscntfinderqwerty.h	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,63 @@
+/*
+* 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 PT_LOGSCNTFINDERQWERTY_H
+#define PT_LOGSCNTFINDERQWERTY_H
+
+#include <QObject>
+#include <qcontactmanager.h>
+
+QTM_USE_NAMESPACE
+
+
+class PT_LogsCntFinderQwerty : public QObject                 
+{
+     Q_OBJECT
+public:
+     
+     inline PT_LogsCntFinderQwerty( int samples ) : mSamples(samples) {}
+     
+private slots:
+
+/*
+ * In addition, there are four private slots that are not treated as testfunctions. 
+ * They will be executed by the testing framework and can be used to initialize and clean up 
+ * either the entire test or the current test function.
+ * 
+ * initTestCase() will be called before the first testfunction is executed.
+ * cleanupTestCase() will be called after the last testfunction was executed.
+ * init() will be called before each testfunction is executed.
+ * cleanup() will be called after every testfunction.
+*/
+    void initTestCase();
+    void cleanupTestCase();
+    void init();
+    void cleanup();
+
+private slots: //test methods
+     
+    void statistics();
+
+private:
+    
+private:
+    
+    QContactManager             *m_manager;
+    int                         mSamples;
+};
+
+
+#endif //PT_LOGSCNTFINDERQWERTY_H
--- a/logsui/logscntfinder/tsrc/pt_logscntfinder/pt_logscntfinder.pro	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/pt_logscntfinder/pt_logscntfinder.pro	Fri Jun 11 13:38:41 2010 +0300
@@ -37,8 +37,10 @@
 
 # Input
     HEADERS += inc\pt_logscntfinder.h 
-            
+    HEADERS += inc\pt_logscntfinderqwerty.h 
     SOURCES += src\pt_logscntfinder.cpp   
+    SOURCES += src\pt_logscntfinderqwerty.cpp   
+    SOURCES += src\main.cpp   
 
 symbian: {
     TARGET.UID2 = 0x100039CE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/pt_logscntfinder/src/main.cpp	Fri Jun 11 13:38:41 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 <QtTest/QtTest>
+
+#include "pt_logscntfinder.h"
+#include "pt_logscntfinderqwerty.h"
+
+
+
+int main(int argc, char *argv[]) //on HW
+{
+    int samples = 100;
+    for (int i=0; i<argc; i++) {
+        if (QString(argv[i]) == "-s") {
+            samples = QString(argv[i+1]).toInt();
+        }
+    }
+
+    QApplication app(argc, argv);
+    
+    PT_LogsCntFinder pt_logscntfinder( samples );
+    QString resultFileName = "c:/data/others/pt_logscntfinder.txt";
+    QStringList args_logsCntFinder( "PT_logscntfinder");
+    args_logsCntFinder << "-o" << resultFileName;
+    QTest::qExec(&pt_logscntfinder, args_logsCntFinder);
+    
+    PT_LogsCntFinderQwerty pt_LogsCntFinderQwerty( samples );
+    resultFileName = "c:/data/others/pt_logscntfinderqwerty.txt";
+    QStringList args_logsCntFinderQwertry( "PT_LogsCntFinderQwerty");
+    args_logsCntFinder << "-o" << resultFileName;
+    QTest::qExec(&pt_LogsCntFinderQwerty, args_logsCntFinderQwertry);
+    
+    return 0;   
+}
+
+
+
+
+ 
--- a/logsui/logscntfinder/tsrc/pt_logscntfinder/src/pt_logscntfinder.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/pt_logscntfinder/src/pt_logscntfinder.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -14,7 +14,7 @@
 * Description:
 *
 */
-#include "pt_LogsCntFinder.h"
+#include "pt_Logscntfinder.h"
 #include "logscntfinder.h"
 
 #include <qtcontacts.h>
@@ -22,33 +22,6 @@
 
 
 
-class PtTest
-{
-public:
-    
-    PtTest( const QString& name );
-    void execute( LogsCntFinder& engine );
-    void calculateMean();
-    void calculateVariance();
-    void calculateDeviation();
-    void print();
-    static QString statHeader(); 
-    
-public:
-    
-    QString mPattern;
-    QList<int> mSamples;
-    float mMean;
-    float mVariance;
-    float mStdDeviation;
-    int mMin;
-    int mMax;
-    int mMinSample;
-    int mMaxSample;
-    int mResults;
-
-};
-
 
 PtTest::PtTest( const QString& name )
 : mPattern(name),
@@ -73,8 +46,6 @@
     engine.predictiveSearchQuery( mPattern );
     mSamples.append( t.elapsed());
     mResults += engine.resultsCount();
-    //mSamples.append( qrand() / 100000000 );
-    //mResults += (100 - mPattern.length() );
     
 }
 
@@ -157,68 +128,44 @@
 
 }
 
-void pt_LogsCntFinder::initTestCase()
+void PT_LogsCntFinder::initTestCase()
 {
 }
 
-void pt_LogsCntFinder::cleanupTestCase()
+void PT_LogsCntFinder::cleanupTestCase()
 {
       
 }
 
 
-void pt_LogsCntFinder::init()
+void PT_LogsCntFinder::init()
 {   
-    qDebug() << "pt_LogsCntFinder::init start";
+    qDebug() << "PT_LogsCntFinder::init start";
     m_finder = 0;
     //open symbian database
     m_manager = new QContactManager("symbian");
     
-    //qDebug() << "pt_LogsCntFinder::init remove old contacts";
+    //qDebug() << "PT_LogsCntFinder::init remove old contacts";
     // Remove all contacts from the database
     
     QList<QContactLocalId> cnt_ids = m_manager->contactIds();
     qDebug() << "contacts now in db" << cnt_ids.count();
     if ( cnt_ids.count() == 600 ) {
-    			QString f("Jack");
-    			QString l("Whatever");
-          createContact_one_Contact( f,l, QString("03432"));
-    	}
+         QString f("Jack");
+         QString l("Whatever");
+         createContact_one_Contact( f,l, QString("03432"));
+    }
 
-	  cnt_ids = m_manager->contactIds();
+    cnt_ids = m_manager->contactIds();
     qDebug() << "contacts now " << cnt_ids.count();
     
-	  
-	   
-    /*if ( cnt_ids.count() != 600 ) {
-    qDebug() << "contacts now before delete" << cnt_ids.count();
-      m_manager->removeContacts(&cnt_ids);
-      cnt_ids = m_manager->contactIds();
-      qDebug() << "contacts now " << cnt_ids.count();
-      
-      QVERIFY(0 == cnt_ids.count());
-      
-      //qDebug() << "pt_LogsCntFinder::createContacts";
-      createContacts();
-      //qDebug() << "pt_LogsCntFinder::createContacts DONE";
-      //qDebug() << "contacts now after create" << cnt_ids.count();
-    }*/
-    
-    
     m_finder = new LogsCntFinder( *m_manager );
     
-    qDebug() << "pt_LogsCntFinder::init end";
+    qDebug() << "PT_LogsCntFinder::init end";
 }
 
-void pt_LogsCntFinder::cleanup()
+void PT_LogsCntFinder::cleanup()
 {
-		/*m_manager = new QContactManager("symbian");
-		QList<QContactLocalId> cnt_ids = m_manager->contactIds();
-		m_manager->removeContacts(&cnt_ids);
-    cnt_ids = m_manager->contactIds();
-    qDebug() << "contacts now " << cnt_ids.count();
-      
-    QVERIFY(0 == cnt_ids.count());*/
     delete m_manager;
     m_manager = 0;
     delete m_finder;
@@ -226,39 +173,9 @@
 }
 
 
-void pt_LogsCntFinder::createContacts()
-{
-		//qDebug() << "pt_LogsCntFinder::createContacts";
-    QList<QString> firstnamelist;
-    QList<QString> Lastnamelist;
-    firstnamelist<<"Micheal"<<"Evans"<<"Kris"<<"Xiao"<<"Una Vivi"<<"Wilda"<<"Tisha"<<"Queen"<<"Olga"<<"Maria Zola";
-    //Lastnamelist<<"Ribecca"<<"Tina"<<"Bob"<<"George"<<"Anna"<<"Yadira"<<"Lennon"<<"Jones"<<"Augustin Zi"<<"Csoma"<<"Baranik"<<"Harhai";
-		Lastnamelist<<"Ribecca"<<"Tina"<<"Bob"<<"George"<<"Anna"<<"Yadira"<<"Lennon"<<"Jones"<<"Augustin Zi"<<"Csoma";
-
-    //for( int z = 0;z<100;z++) {
-    for( int z = 0;z<5;z++) {
-      for(int i =0; i < firstnamelist.count(); i++) {
-        for(int k =0; k < Lastnamelist.count(); k++) {
-          createContact_one_Contact(firstnamelist[i], Lastnamelist[k], QString("03432"));
-        }
-      }
-    }
-    
-    // Empty contact
-    //QContact empty;
-    //m_manager->saveContact(&empty);
-    /*
-    QList<QContactLocalId> cnt_ids = m_manager->contactIds();
-    cnt_ids = m_manager->contactIds();
-    int j = cnt_ids.count();
-    QVERIFY( j == 900 );
-    */
-		//qDebug() << "pt_LogsCntFinder::createContacts DONE";
-    
-}
 
 
-void pt_LogsCntFinder::createContact_one_Contact(QString& firstname, QString& Lastname, QString phnumber)
+void PT_LogsCntFinder::createContact_one_Contact(QString& firstname, QString& Lastname, QString phnumber)
 {
     //Currenlty we can only fetch firstname,lastname,companyname and sip/email/phone from the databse
     // so create contact with only these details
@@ -276,18 +193,15 @@
     number.setNumber(phnumber);
     phonecontact.saveDetail(&number);
     
-    //qDebug() << "pt_LogsCntFinder::createContact_one_Contact about to save..";
-    
     m_manager->saveContact(&phonecontact);
-    //qDebug() << "pt_LogsCntFinder::createContact_one_Contact done";
    
 }
 
 
-void pt_LogsCntFinder::testPredictiveQuery()
+void PT_LogsCntFinder::testPredictiveQuery()
 {
     const int rowsInDisplay = 10;
-    qDebug() << "=>pt_LogsCntFinder::testPredictiveQuery";
+    qDebug() << "=>PT_LogsCntFinder::testPredictiveQuery";
     
     QTime t;
     qDebug() << "--- testing query with 5 ---";
@@ -301,42 +215,31 @@
      
     qDebug() << "-- list 10 matched records start --";
     for( int i=0;(i < rowsInDisplay && i < results);i++) {
- 	    QTime t1;
-      t1.start();
-      const LogsCntEntry& data = m_finder->resultAt( i );
-      //qDebug() << "First Name: ";
-      for (int j = 0; j < data.firstName().length(); j++) {
-        //qDebug() << data.firstName().at(j).text(); 
-      }
-      //qDebug() << "Last Name: ";
-      for (int k = 0; k < data.lastName().length(); k++) {
-        //qDebug() << data.lastName().at(k).text();
-      }
-      //qDebug() << "Phone number: " << data.phoneNumber().text();
-      
-    qDebug() << "fetched one contact";
-    qDebug("  Time elapsed:%d ms", t1.elapsed());
+        QTime t1;
+        t1.start();
+        const LogsCntEntry& data = m_finder->resultAt( i );
+        qDebug() << "fetched one contact";
+        qDebug("  Time elapsed:%d ms", t1.elapsed());
     }
     qDebug() << "-- list 10 matched records end --";
     qDebug("  Time elapsed:%d ms", t.elapsed());
 
-    qDebug() << "<=pt_LogsCntFinder::testPredictiveQuery";
-      
+    qDebug() << "<=PT_LogsCntFinder::testPredictiveQuery";
     }
     
   
 
 
-void pt_LogsCntFinder::testExtendedQuery()
+void PT_LogsCntFinder::testExtendedQuery()
 {
-    qDebug() << "=>pt_LogsCntFinder::testExtendedQuery";
-    qDebug() << "<=pt_LogsCntFinder::testPredictiveQuery";
+    qDebug() << "=>PT_LogsCntFinder::testExtendedQuery";
+    qDebug() << "<=PT_LogsCntFinder::testPredictiveQuery";
 
   }
     
-void pt_LogsCntFinder::testDiffHitQuery()
+void PT_LogsCntFinder::testDiffHitQuery()
 {
-    qDebug() << "=>pt_LogsCntFinder::testDiffHitQuery";
+    qDebug() << "=>PT_LogsCntFinder::testDiffHitQuery";
 
     QTime t;
 
@@ -380,14 +283,14 @@
     results = m_finder->resultsCount();
     qDebug() << "found " << results << " matches:";
 
-    qDebug() << "<=pt_LogsCntFinder::testDiffHitQuery";
+    qDebug() << "<=PT_LogsCntFinder::testDiffHitQuery";
 
 
 }
 
-void pt_LogsCntFinder::statistics()
+void PT_LogsCntFinder::statistics()
 {
-    qDebug() << "=> pt_LogsCntFinder::statistics";
+    qDebug() << "=> PT_LogsCntFinder::statistics";
     int results = 0;
     int queries = 0;
     int ind = mSamples; //samples
@@ -439,28 +342,7 @@
         tests[ind].print();
     }
     
-    qDebug() << "<= pt_LogsCntFinder::statistics";
+    qDebug() << "<= PT_LogsCntFinder::statistics";
 }
 
 
-//QTEST_MAIN(pt_LogsCntFinder); // on Emulator
-
-int main(int argc, char *argv[]) //on HW
-{
-    int samples = 100;
-    for (int i=0; i<argc; i++) {
-        if (QString(argv[i]) == "-s") {
-            samples = QString(argv[i+1]).toInt();
-        }
-    }
-
-    QApplication app(argc, argv);
-    
-    pt_LogsCntFinder pt_logscntfinder( samples );
-    QString resultFileName = "c:/data/others/pt_logscntfinder.txt";
-    QStringList args_logsCntFinder( "pt_logscntfinder");
-    args_logsCntFinder << "-o" << resultFileName;
-    QTest::qExec(&pt_logscntfinder, args_logsCntFinder);
-    return 0;   
-}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/pt_logscntfinder/src/pt_logscntfinderqwerty.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,115 @@
+/*
+* 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 "pt_logscntfinderqwerty.h"
+#include "pt_logscntfinder.h"
+
+#include <qtcontacts.h>
+#include <QtTest/QtTest>
+
+
+void PtTest::execute( QContactManager& manager )
+{
+
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QString pattern = mPattern + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    
+    QTime t;
+    t.start();
+    
+    QList<QContactLocalId> cnt_ids = manager.contactIds( df );
+    mSamples.append( t.elapsed());
+    mResults += cnt_ids.count();
+    
+}
+
+void PT_LogsCntFinderQwerty::initTestCase()
+{
+}
+
+void PT_LogsCntFinderQwerty::cleanupTestCase()
+{
+      
+}
+
+
+void PT_LogsCntFinderQwerty::init()
+{   
+    qDebug() << "PT_LogsCntFinderQwerty::init start";
+    //open symbian database
+    m_manager = new QContactManager("symbian");
+    
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds();
+    qDebug() << "contacts now in db" << cnt_ids.count();
+    qDebug() << "PT_LogsCntFinderQwerty::init end";
+}
+
+void PT_LogsCntFinderQwerty::cleanup()
+{
+    delete m_manager;
+    m_manager = 0;
+}
+
+
+
+void PT_LogsCntFinderQwerty::statistics()
+{
+    qDebug() << "=> PT_LogsCntFinderQwerty::statistics";
+    int results = 0;
+    int queries = 0;
+    int ind = mSamples; //samples
+    QTime t;
+
+    QList<PtTest> tests;
+    tests.append( PtTest("a") );
+    tests.append( PtTest("5") );
+    tests.append( PtTest("Paul") );
+    tests.append( PtTest("Paul Mes") );
+   
+    t.start();
+    
+    while( ind > 0 ) {
+        for( int j = 0; j < tests.length(); j++ ) {
+            tests[j].execute( *m_manager );
+            queries++;
+        }
+        ind--;
+    }
+    
+    int totalTime = t.elapsed();
+    
+    
+    for( ind = 0; ind < tests.length(); ind++ ) {
+        tests[ind].calculateMean();
+        tests[ind].calculateVariance();
+        tests[ind].calculateDeviation();
+        results += tests[ind].mResults;
+    }
+    
+    qDebug("-- Statistics --");
+    qDebug("%d queries executed with %d results in %d ms.",
+            queries, results, totalTime );
+    qDebug() << PtTest::statHeader();
+    for( ind = 0; ind < tests.length(); ind++ ) {
+        tests[ind].print();
+    }
+    
+    qDebug() << "<= PT_LogsCntFinderQwerty::statistics";
+}
+
--- a/logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinder.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinder.h	Fri Jun 11 13:38:41 2010 +0300
@@ -26,7 +26,7 @@
 class LogsCntFinder;
 
 
-class st_LogsCntFinder : public QObject                 
+class ST_LogsCntFinder : public QObject                 
 {
      Q_OBJECT
     
@@ -48,14 +48,33 @@
      void cleanup();
 
 private slots: //test methods
-    void testPredictiveSearchQuery();
-    void testPredictiveThaiSearchQuery();
-    void testKeymap();
+
+    void testKeymap_2();
+    void testKeymap_3();
+    void testKeymap_4();
+    void testKeymap_5();
+    void testKeymap_6();
+    void testKeymap_7();
+    void testKeymap_8();
+    void testKeymap_9();
     void testPredictiveSearchQueryZeroStart();
+    void testPredictiveSearchQueryZeroStartZeroEnd();
     void testPredictiveSearchQueryZeroMiddle();
+    void testPredictiveSearchQueryMultiZerosMiddle();
+    void testPredictiveSearchQueryZeroMiddleLong();
+    void testPredictiveSearchQueryMultiZerosAndZeroMiddle();
+    void testPredictiveSearchQueryPartialCached();
+    void testPredictiveSearchQueryFullyCached();
+    void testPredictiveSearchQueryPartialCachedNoResults();
+    void testPredictiveSearchQueryFullyCachedNoResults();
+    void testPredictiveSearchQueryCachedZeroCase();
+    void testPredictiveSearchQueryLogs();
+    void testPredictiveSearchQueryLogsZeroCase();
+    void testPredictiveSearchQueryLogsContactsPartialCached();
+    void testPredictiveSearchQueryLogsContactsFullyCached();
+    void testPredictiveSearchQueryLogsContactsZeroCase();
+    void testPredictiveSearchQueryLogsContactsPhoneNumberMatch();
     void testPredictiveSearchQueryLimit();
-    void testPredictiveSearchQueryLogs();
-    void testPredictiveSearchQueryLogsContacts();
     void testQueryOrder();
 
 private:
@@ -71,7 +90,6 @@
     void createContactsForQueryOrder();
     void createContactsForQueryZero();
     void createHistoryEvents();
-    void createThaiContacts();
     void createLogEvent(
         QString firstname, 
         QString Lastname, 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinderqwerty.h	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef ST_LOGSCNTFINDERQWERTY_H
+#define ST_LOGSCNTFINDERQWERTY_H
+
+#include <QObject>
+#include <qcontactmanager.h>
+#include <hbinputlanguage.h>
+
+QTM_USE_NAMESPACE
+
+class LogsCntFinder;
+
+
+class ST_LogsCntFinderQwerty : public QObject                 
+{
+     Q_OBJECT
+    
+private slots:
+
+/*
+ * In addition, there are four private slots that are not treated as testfunctions. 
+ * They will be executed by the testing framework and can be used to initialize and clean up 
+ * either the entire test or the current test function.
+ * 
+ * initTestCase() will be called before the first testfunction is executed.
+ * cleanupTestCase() will be called after the last testfunction was executed.
+ * init() will be called before each testfunction is executed.
+ * cleanup() will be called after every testfunction.
+*/
+     void initTestCase();
+     void cleanupTestCase();
+     void init();
+     void cleanup();
+
+private slots: //test methods
+
+    void testPredictiveEmailSearchNameAndEmailMatch();
+    void testPredictiveEmailSearchWithSpace();
+    void testPredictiveEmailSearchEmailMatch();
+    void testPredictiveEmailSearchNoEmails();
+    void testPredictiveEmailSearchOverLongPattern();
+    void testPredictiveEmailSearchSpecialCharsInPattern();
+
+private:
+
+    void createContacts();
+
+private:
+    QContactManager *m_manager;
+};
+
+
+#endif // ST_LOGSCNTFINDERQWERTY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/inc/st_logscntfinderthai.h	Fri Jun 11 13:38:41 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 ST_LOGSCNTFINDERTHAI_H
+#define ST_LOGSCNTFINDERTHAI_H
+
+#include <QObject>
+#include <qcontactmanager.h>
+#include <hbinputlanguage.h>
+
+QTM_USE_NAMESPACE
+
+class LogsCntFinder;
+
+
+class ST_LogsCntFinderThai : public QObject                 
+{
+     Q_OBJECT
+    
+private slots:
+
+/*
+ * In addition, there are four private slots that are not treated as testfunctions. 
+ * They will be executed by the testing framework and can be used to initialize and clean up 
+ * either the entire test or the current test function.
+ * 
+ * initTestCase() will be called before the first testfunction is executed.
+ * cleanupTestCase() will be called after the last testfunction was executed.
+ * init() will be called before each testfunction is executed.
+ * cleanup() will be called after every testfunction.
+*/
+     void initTestCase();
+     void cleanupTestCase();
+     void init();
+     void cleanup();
+
+private slots: //test methods
+    void testPredictiveThaiSearchQuery();
+
+private:
+
+    void createThaiContacts();
+    void createOneContact(QString firstname, QString Lastname, 
+                          QString phnumber);
+     
+
+private:
+    QContactManager *m_manager;
+    LogsCntFinder   *m_finder;
+};
+
+
+#endif // ST_LOGSCNTFINDERTHAI_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/src/main.cpp	Fri Jun 11 13:38:41 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:  
+*
+*/
+
+
+#include <QtTest/QtTest>
+
+#include "st_logscntfinder.h"
+#include "st_logscntfinderqwerty.h"
+#include "st_logscntfinderthai.h"
+
+#include "testresultxmlparser.h"
+
+
+#define STEST_CLASS( tc )\
+    tc tc##_instance;\
+    QStringList tc##_args( #tc );\
+    resultFileName = QString("c:/data/others/") + QString( #tc ) + QString(".xml");\
+    tc##_args << "-xml" << "-o" << resultFileName;\
+    QTest::qExec(&tc##_instance, tc##_args);\
+    parser.parseAndPrintResults(resultFileName,true)
+    
+
+
+int main(int argc, char *argv[]) 
+{
+    bool promptOnExit(false);
+    bool useQApplication(true);
+    for (int i=0; i<argc; i++) {
+        if (QString(argv[i]) == "-prompt")
+            promptOnExit = true;
+        else if (QString(argv[i]) == "-noqapp")
+            useQApplication = false;
+    }
+    printf("Running tests...\n");
+    
+    QApplication* app = 0;
+    if ( useQApplication ) 
+        app = new QApplication(argc, argv);
+    
+    TestResultXmlParser parser;
+    QString resultFileName;
+    
+    STEST_CLASS( ST_LogsCntFinder );
+    STEST_CLASS( ST_LogsCntFinderThai );
+    STEST_CLASS( ST_LogsCntFinderQwerty );
+    
+    if (promptOnExit) {
+        printf("Press any key...\n");
+        getchar(); 
+    }
+    delete app;
+    return 0;   
+}
+
+
+
+ 
--- a/logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinder.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinder.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -22,18 +22,33 @@
 #include <QtTest/QtTest>
 #include <hbinputsettingproxy.h>
 
-void st_LogsCntFinder::initTestCase()
+
+#define CHECK_RESULTS( count, first, last )\
+    for(int i=0;i<count; i++ ) {\
+        if ( i == 0 ) {\
+            QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString(first));\
+            QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString(last));\
+        } else {\
+            m_finder->resultAt(i);\
+        }\
+    }
+
+        
+void ST_LogsCntFinder::initTestCase()
 {
 }
 
-void st_LogsCntFinder::cleanupTestCase()
+void ST_LogsCntFinder::cleanupTestCase()
 {
     
 }
 
 
-void st_LogsCntFinder::init()
+void ST_LogsCntFinder::init()
 {   
+    HbInputLanguage eng( QLocale::English );
+    HbInputSettingProxy::instance()->setGlobalInputLanguage( eng );
+    
     m_finder = 0;
     //open symbian database
     m_manager = new QContactManager("symbian");
@@ -43,8 +58,8 @@
     // Remove all contacts from the database
     QList<QContactLocalId> cnt_ids = m_manager->contactIds();
     qDebug() << "contacts now before deleting" << cnt_ids.count();
-    
-    QVERIFY(m_manager->removeContacts(&cnt_ids, 0));
+
+    QVERIFY( m_manager->removeContacts(cnt_ids, 0 ) );
     cnt_ids = m_manager->contactIds();
     QCOMPARE(cnt_ids.count(), 0);
 
@@ -54,7 +69,7 @@
     }
 }
 
-void st_LogsCntFinder::cleanup()
+void ST_LogsCntFinder::cleanup()
 {
     delete m_manager;
     m_manager = 0;
@@ -65,7 +80,7 @@
     
 }
 
-void st_LogsCntFinder::createContacts()
+void ST_LogsCntFinder::createContacts()
 {
     /*Create contacts in Contacts DB for keymap testing
 		Stefann    Yadira
@@ -99,41 +114,33 @@
    
     int contactsCount = m_manager->contactIds().count();
     QCOMPARE(contactsCount, 13);
-    qDebug() << "st_LogsCntFinder::createContacts_testKeymap. created " << contactsCount << " contacts";
 
     
 }
 
-void st_LogsCntFinder::createThaiContacts()
+/* 
+Dlice 00202       Qwerty        45789348
+#Paula 2003       Augustin Ci   0078945617 
+Paula 02010       Ezerty Adam   78945617
+Ced               Y,g           +78945617
+Jari-Pekka        Baraniktestteste 78945617
+*/
+void ST_LogsCntFinder::createContactsForQueryZero()
 {
-    /*Create contacts in Contacts DB
+    createContacts();
+    createOneContact( QString("Dlice 00202"), QString("Qwerty"), QString("45789348") );
+    createOneContact( QString("#Paula 2003"), QString("Augustin Ci"), QString("0078945617") );
+    createOneContact( QString("Paula 02010"), QString("Ezerty Adam"), QString("78945617") );
+    createOneContact( QString("Ced"), QString("Y,g"), QString("+78945617") );
+    createOneContact( QString("Jari-Pekka"), QString(" "), QString("78945617") );
 
-		*/
-		
-    const QChar thaiFName1[] = {0x0E06,0x0E0A}; // map:23
-    const QChar thaiLName1[] = {0x0E0E,0x0E14,0x0E19,0x0E1E,0x0E23,0x0E2A };//map 456789
-    
-    QString first ( thaiFName1, 2 );
-    QString last ( thaiFName1, 6 );
-    createOneContact( first, last, QString("932472398") );
-		
-    const QChar thaiFName2[] = {0x0E30,0x0E0A};//#3, 
-    const QChar thaiLName2[] = {0x0E2F,0x0E14,0x0E19,0x0E1E,0x0E23,0x0E2A };//*56789
-    
-    QString first2 ( thaiFName1, 2 );
-    QString last2 ( thaiFName1, 6 );
-    createOneContact( first2, last2, QString("932472398") );
-		
-		
-   
     int contactsCount = m_manager->contactIds().count();
-    QCOMPARE(contactsCount, 2);
-    qDebug() << "st_LogsCntFinder::createThaiContacts_ThaiSearch. created " << contactsCount << " contacts";
-
-    
+    QCOMPARE(contactsCount, 18);
 }
 
-void st_LogsCntFinder::createHistoryEvents()
+
+
+void ST_LogsCntFinder::createHistoryEvents()
 {
   createLogEvent( QString("Stefann Albert"), QString("Fedrernn"), QString("932472398") );
   createLogEvent( QString("Jonn"), QString("Lennon"), QString("932472398") );
@@ -141,7 +148,7 @@
   
 }
 
-void st_LogsCntFinder::createLogEvent(QString firstname, QString lastname, 
+void ST_LogsCntFinder::createLogEvent(QString firstname, QString lastname, 
                                       QString phnumber)
 {
   LogsCntEntryHandle* dummy = 0;
@@ -156,8 +163,20 @@
   
 }
 
+void ST_LogsCntFinder::createContactsForQueryOrder()
+{
+    createContacts();
+    createOneContact( QString("Anna"), QString("Qwerty"), QString("45789348") );
+    createOneContact( QString("Paula"), QString("Qwerty"), QString("78945617") );
+    createOneContact( QString("Paula"), QString("Azerty"), QString("78945617") );
 
-void st_LogsCntFinder::createOneContact(QString firstname, QString Lastname, 
+    int contactsCount = m_manager->contactIds().count();
+    QCOMPARE(contactsCount, 16);
+}
+
+
+
+void ST_LogsCntFinder::createOneContact(QString firstname, QString Lastname, 
                                                  QString phnumber)
 {
     //Currenlty we can only fetch firstname,lastname,companyname and sip/email/phone from the databse
@@ -177,7 +196,7 @@
     phonecontact.saveDetail(&number);
     
     m_manager->saveContact(&phonecontact);
-    qDebug() << "st_LogsCntFinder::createOneContact done";
+    qDebug() << "ST_LogsCntFinder::createOneContact done";
 }
 
 
@@ -186,138 +205,6 @@
 // Tests
 //
 
-void st_LogsCntFinder::testPredictiveThaiSearchQuery()
-{
-    HbInputLanguage thai( QLocale::Thai );
-    HbInputSettingProxy::instance()->setGlobalInputLanguage( thai );
-    		  
-    createThaiContacts();
-
-		//There is no recent call in logs UI
-    //case 1
-    /*m_finder->predictiveSearchQuery( QString("2") );
-    QCOMPARE( m_finder->resultsCount(), 1 );*/
-    qDebug() << "-- 2 query starts --";
-    m_finder->predictiveSearchQuery( QString("2") );
-    qDebug() << "found " << m_finder->resultsCount() << " matches:";
- 
-    qDebug() << "-- 4 query starts --";
-    m_finder->predictiveSearchQuery( QString("4") );
-    qDebug() << "found " << m_finder->resultsCount() << " matches:";
-        qDebug() << "-- 402 query starts --";
-    m_finder->predictiveSearchQuery( QString("402") );
-    qDebug() << "found " << m_finder->resultsCount() << " matches:";
-        qDebug() << "-- *4 query starts --";
-    m_finder->predictiveSearchQuery( QString("*4") );
-    qDebug() << "found " << m_finder->resultsCount() << " matches:";
-        qDebug() << "-- *402### query starts --";
-    m_finder->predictiveSearchQuery( QString("*402###") );
-    qDebug() << "found " << m_finder->resultsCount() << " matches:";
-
-    /*m_finder->predictiveSearchQuery( QString("4") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-
-    m_finder->predictiveSearchQuery( QString("402") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-
-    m_finder->predictiveSearchQuery( QString("*4") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-
-    m_finder->predictiveSearchQuery( QString("*402###") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-
-    m_finder->predictiveSearchQuery( QString("*4***00002###") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-    */
-    
-    
-}
-
-
-// Test basic predictive search, all records with names starting letters "J, K, L" are matched
-void st_LogsCntFinder::testPredictiveSearchQuery()
-{
-    createContacts();
-		
-		//There is no recent call in logs UI
-    //case 1
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 5 );
-    //see half of matched results
-    //results == for(int i =0;i<f->resultCount() / 2;i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString("Maria-Zola"));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Jones"));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString("Jonn"));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString("Ennon"));*/
-
-    m_finder->predictiveSearchQuery( QString("566") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 5 );
-    
-    //case 2
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 5 );
-    //see all of the matched results
-    //results == for(int i =0;i<f->resultCount();i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString("Maria-Zola"));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Jones"));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString("Jonn"));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString("Ennon"));
-    QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString("Una Vivi"));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Kantsak"));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString("Wilda"));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString("Lazar"));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString("Levis"));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString("Augustin Zi"));
-    */
-
-    m_finder->predictiveSearchQuery( QString("566") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 5 );
-    
-    //case 3
-    m_finder->predictiveSearchQuery( QString("6") );
-    QCOMPARE( m_finder->resultsCount(), 3 );
-    //see all of matched results
-    //results == for(int i =0;i<f->resultCount();i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString("Maria-Zola"));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Jones"));
-    QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString("Nancy"));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Csoma"));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString("Olga"));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString("Baraniktestteste"));*/
-
-    m_finder->predictiveSearchQuery( QString("69") );
-    QCOMPARE( m_finder->resultsCount(), 0 );
-    m_finder->predictiveSearchQuery( QString("692") );
-    QCOMPARE( m_finder->resultsCount(), 0 );
-    m_finder->predictiveSearchQuery( QString("6") );
-    QCOMPARE( m_finder->resultsCount(), 3 );
-    
-    //case 4
-    
-    m_finder->predictiveSearchQuery( QString("2") );
-    QCOMPARE( m_finder->resultsCount(), 3 );
-    //see half of matched results
-    //results == for(int i =0;i<f->resultCount() / 2;i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString("Levis"));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Augustin Zi"));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString(""));*/
-
-    m_finder->predictiveSearchQuery( QString("20") );
-    QCOMPARE( m_finder->resultsCount(), 3 );
-    m_finder->predictiveSearchQuery( QString("209") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-    m_finder->predictiveSearchQuery( QString("20") );
-    QCOMPARE( m_finder->resultsCount(), 3 );
-    m_finder->predictiveSearchQuery( QString("2") );
-    QCOMPARE( m_finder->resultsCount(), 3 );
-       
-}
-
 /* Test itut keymap predictive search, checking that press key "2", records with names starting letters "A, B, C" are matched;
 Press key "3", records with names starting letters "D,E,F" are matched;
 Press key "4", records with names starting letters "G,H,I" are matched;
@@ -329,66 +216,86 @@
 Press key "0", records with names starting letters "space" etc. are matched;
 Press key "1", records with names starting letters "-,Ä,Ö" etc. are matched;
 */
-void st_LogsCntFinder::testKeymap()
+void ST_LogsCntFinder::testKeymap_2()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("2") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
+
+void ST_LogsCntFinder::testKeymap_3()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("3") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
+
+void ST_LogsCntFinder::testKeymap_4()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("4") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
+
+void ST_LogsCntFinder::testKeymap_5()
 {
     createContacts();
     const LogsCntEntry* data; 
-
-    for (int i = 2; i < 10; i++)
-    {
-        m_finder->predictiveSearchQuery( QString::number(i) );
-        switch( i ) 
-        {
-        case 2:
-            QCOMPARE( m_finder->resultsCount(), 3 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;     
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 5 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
 
-        case 3:
-            QCOMPARE( m_finder->resultsCount(), 3 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;
-
-        case 4:
-            QCOMPARE( m_finder->resultsCount(), 3 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;
+void ST_LogsCntFinder::testKeymap_6()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("6") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
 
-        case 5:
-            QCOMPARE( m_finder->resultsCount(), 5 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;
-
-        case 6:
-            QCOMPARE( m_finder->resultsCount(), 3 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;
+void ST_LogsCntFinder::testKeymap_7()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("7") );
+    QCOMPARE( m_finder->resultsCount(), 5 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(),1 );
+}
 
-        case 7:
-            QCOMPARE( m_finder->resultsCount(), 5 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(),1 );
-            break;
+void ST_LogsCntFinder::testKeymap_8()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("8") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
 
-        case 8:
-            QCOMPARE( m_finder->resultsCount(), 2 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;
+void ST_LogsCntFinder::testKeymap_9()
+{
+    createContacts();
+    const LogsCntEntry* data; 
+    m_finder->predictiveSearchQuery( QString("9") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    data = &m_finder->resultAt( 0 );
+    QCOMPARE( data->firstName().count(), 1 );
+}
 
-        case 9:
-            QCOMPARE( m_finder->resultsCount(), 3 );
-            data = &m_finder->resultAt( 0 );
-            QCOMPARE( data->firstName().count(), 1 );
-            break;
-        }
-    }
-}
 
 /* Test zero query search: 1. zero between "1-9" numbers, then first zero works as "AND" statement; 
 2. (multiple) zero at beginning; 3. (multiple) zero at the end; 
@@ -396,59 +303,350 @@
 6. Query limit is 15, the 16th is ignored, and first 0 works as "AND" statement */
 
 
-void st_LogsCntFinder::testPredictiveSearchQueryZeroStart()
+void ST_LogsCntFinder::testPredictiveSearchQueryZeroStart()
 {
     createContactsForQueryZero();
     
     m_finder->predictiveSearchQuery( QString("00202") );
     QCOMPARE( m_finder->resultsCount(), 2 );
-    
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryZeroStartZeroEnd()
+{
+    createContactsForQueryZero();
+        
     m_finder->predictiveSearchQuery( QString("02010") );
     QCOMPARE( m_finder->resultsCount(), 1 );
+}
 
-}
-void st_LogsCntFinder::testPredictiveSearchQueryZeroMiddle()
+void ST_LogsCntFinder::testPredictiveSearchQueryZeroMiddle()
 {
     createContactsForQueryZero();
-    m_finder->predictiveSearchQuery( QString("566") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
 
     m_finder->predictiveSearchQuery( QString("56603") );
     QCOMPARE( m_finder->resultsCount(), 1 );
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryMultiZerosMiddle()
+{
+    createContactsForQueryZero();
 
     m_finder->predictiveSearchQuery( QString("2003") );
     QCOMPARE( m_finder->resultsCount(), 2 );
-    
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryZeroMiddleLong()
+{
+    createContactsForQueryZero();
+
     m_finder->predictiveSearchQuery( QString("2272645837883065") );
     QCOMPARE( m_finder->resultsCount(), 1 );
-       
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryMultiZerosAndZeroMiddle()
+{
+    createContactsForQueryZero();
+
     m_finder->predictiveSearchQuery( QString("200904") );
     QCOMPARE( m_finder->resultsCount(), 1 );
     
 }
 
-/* 
-Dlice 00202       Qwerty        45789348
-#Paula 2003       Augustin Ci   0078945617 
-Paula 02010       Ezerty Adam   78945617
-Ced               Y,g           +78945617
-Jari-Pekka        Baraniktestteste 78945617
-*/
-void st_LogsCntFinder::createContactsForQueryZero()
+
+// Test basic predictive search, all records with names starting letters "J, K, L" are matched
+
+// 5 -> 56 -> 5 -> 56    (not all cached)
+void ST_LogsCntFinder::testPredictiveSearchQueryPartialCached()
+{
+    createContacts();
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 5 );
+    //see half of matched results
+    CHECK_RESULTS( 3, "Jonn", "Ennon" );
+    
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    //see half of matched results
+    CHECK_RESULTS( 1, "Jonn", "Ennon" );
+    
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 5 );
+    CHECK_RESULTS( 3, "Jonn", "Ennon" );
+
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    //see half of matched results
+    CHECK_RESULTS( 1, "Jonn", "Ennon" );
+    
+}
+
+// 5 -> 56 -> 5 -> 56   (all cached)
+void ST_LogsCntFinder::testPredictiveSearchQueryFullyCached()
+{
+    createContacts();
+
+    //case 1
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 5 );
+    //see all matched results
+    CHECK_RESULTS( 5, "Jonn", "Ennon" );
+    
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    //see all of matched results
+    CHECK_RESULTS( 2, "Jonn", "Ennon" );
+    
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 5 );
+    //see all of matched results
+    CHECK_RESULTS( 5, "Jonn", "Ennon" );
+
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    //see all of matched results
+    CHECK_RESULTS( 2, "Jonn", "Ennon" );
+    
+}
+
+// 6 -> 69 (no match) -> 692 (no match) -> 69 (no match) -> 6 -> 69    (not all cached)
+void ST_LogsCntFinder::testPredictiveSearchQueryPartialCachedNoResults()
+{
+    createContacts();
+		
+    m_finder->predictiveSearchQuery( QString("6") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    //see half of matched results
+    CHECK_RESULTS( 2, "Maria-Zola", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("69") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    m_finder->predictiveSearchQuery( QString("692") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    m_finder->predictiveSearchQuery( QString("69") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    
+    m_finder->predictiveSearchQuery( QString("6") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    //see half of matched results
+    CHECK_RESULTS( 2, "Maria-Zola", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("69") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    
+}
+
+// 6 -> 69 (no match) -> 692 (no match) -> 69 (no match) -> 6 -> 69    (all cached)
+void ST_LogsCntFinder::testPredictiveSearchQueryFullyCachedNoResults()
+{
+    createContacts();
+                
+    m_finder->predictiveSearchQuery( QString("6") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    //see all of matched results
+    CHECK_RESULTS( 3, "Maria-Zola", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("69") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    m_finder->predictiveSearchQuery( QString("692") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    m_finder->predictiveSearchQuery( QString("69") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    
+    m_finder->predictiveSearchQuery( QString("6") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    //see all of matched results
+    CHECK_RESULTS( 3, "Maria-Zola", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("69") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    
+    
+}
+
+// 6 -> 69 (no match) -> 692 (no match) -> 69 (no match) -> 6 (all cached)
+void ST_LogsCntFinder::testPredictiveSearchQueryCachedZeroCase()
 {
     createContacts();
-    createOneContact( QString("Dlice 00202"), QString("Qwerty"), QString("45789348") );
-    createOneContact( QString("#Paula 2003"), QString("Augustin Ci"), QString("0078945617") );
-    createOneContact( QString("Paula 02010"), QString("Ezerty Adam"), QString("78945617") );
-    createOneContact( QString("Ced"), QString("Y,g"), QString("+78945617") );
-    createOneContact( QString("Jari-Pekka"), QString(" "), QString("78945617") );
+    
+    m_finder->predictiveSearchQuery( QString("2") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    CHECK_RESULTS( 2, "Levis", "Augustin" );//Augustin Zi
+
+    m_finder->predictiveSearchQuery( QString("20") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    CHECK_RESULTS( 2, "Levis", "Augustin" );//Augustin Zi
+    
+    m_finder->predictiveSearchQuery( QString("209") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+    CHECK_RESULTS( 1, "Levis", "Augustin" ); //Augustin Zi
+    
+    m_finder->predictiveSearchQuery( QString("20") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    CHECK_RESULTS( 2, "Levis", "Augustin" );//Augustin Zi
+    
+    m_finder->predictiveSearchQuery( QString("2") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    CHECK_RESULTS( 2, "Levis", "Augustin" );//Augustin Zi
+       
+}
+
+
+//There is recent call in logs, no contacts DB
+void ST_LogsCntFinder::testPredictiveSearchQueryLogs()
+{
+    createHistoryEvents();
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
 
-    int contactsCount = m_manager->contactIds().count();
-    QCOMPARE(contactsCount, 18);
+    m_finder->predictiveSearchQuery( QString("53") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+    CHECK_RESULTS( 1, "Jonn", "Lennon" );
+    
+    m_finder->predictiveSearchQuery( QString("539") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+
+    m_finder->predictiveSearchQuery( QString("53") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+    CHECK_RESULTS( 1, "Jonn", "Lennon" );
+    
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryLogsZeroCase()
+{
+    createHistoryEvents();
+    
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+
+    m_finder->predictiveSearchQuery( QString("50") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("503") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("50") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+        
 }
 
+//There is recent call in logs, and contacts DB
+void ST_LogsCntFinder::testPredictiveSearchQueryLogsContactsPartialCached()
+{
+    createHistoryEvents();
+    createContacts();
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 5, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 4 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("569") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 4 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 5, "Dim-Petter", "Jones" );
+    
+    
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryLogsContactsFullyCached()
+{
+    createHistoryEvents();
+    createContacts();
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 7, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 4 );
+    CHECK_RESULTS( 4, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("569") );
+    QCOMPARE( m_finder->resultsCount(), 0 );
+    
+    m_finder->predictiveSearchQuery( QString("56") );
+    QCOMPARE( m_finder->resultsCount(), 4 );
+    CHECK_RESULTS( 4, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 7, "Dim-Petter", "Jones" );
+    
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryLogsContactsZeroCase()
+{
+    createHistoryEvents();
+    createContacts();
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 5, "Dim-Petter", "Jones" );
+
+    m_finder->predictiveSearchQuery( QString("50") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("503") );
+    QCOMPARE( m_finder->resultsCount(), 2 );
+    CHECK_RESULTS( 2, "Dim-Petter", "Jones" );
+    
+    m_finder->predictiveSearchQuery( QString("50") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 5, "Dim-Petter", "Jones" );
+
+    m_finder->predictiveSearchQuery( QString("5") );
+    QCOMPARE( m_finder->resultsCount(), 7 );
+    CHECK_RESULTS( 5, "Dim-Petter", "Jones" );
+    
+}
+
+void ST_LogsCntFinder::testPredictiveSearchQueryLogsContactsPhoneNumberMatch()
+{
+    createHistoryEvents();
+    createContacts();
+
+    m_finder->predictiveSearchQuery( QString("9") );
+    QCOMPARE( m_finder->resultsCount(), 6 ); //3 history + 3 contacts
+    CHECK_RESULTS( 5, "Stefann", "Fedrernn" );
+
+    m_finder->predictiveSearchQuery( QString("93") );
+    QCOMPARE( m_finder->resultsCount(), 3 );
+    CHECK_RESULTS( 1, "Stefann", "Fedrernn" );
+    
+}
+
+
 // Test query limit is 15, the 16th digit is ignored
-void st_LogsCntFinder::testPredictiveSearchQueryLimit()
+void ST_LogsCntFinder::testPredictiveSearchQueryLimit()
 {
     createContacts();
 
@@ -481,96 +679,7 @@
     QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString("Baraniktestteste"));
 }
 
-//There is recent call in logs, no contacts DB
-void st_LogsCntFinder::testPredictiveSearchQueryLogs()
-{
-    createHistoryEvents();
-
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    
-    //case 1
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    //see half of matched results
-    //results == for(int i =0;i<f->resultCount() / 2;i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString(""));*/
-
-    m_finder->predictiveSearchQuery( QString("533") );
-    QCOMPARE( m_finder->resultsCount(), 0 );
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    
-        //case 2
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    //see half of matched results
-    //results == for(int i =0;i<f->resultCount() / 2;i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString(""));*/
-
-    m_finder->predictiveSearchQuery( QString("50") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    m_finder->predictiveSearchQuery( QString("503") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-    m_finder->predictiveSearchQuery( QString("50") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-        
-}
-
-//There is recent call in logs, and contacts DB
-void st_LogsCntFinder::testPredictiveSearchQueryLogsContacts()
-{
-    createHistoryEvents();
-    createContacts();
-
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    
-    //case 1
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    //see half of matched results
-    //results == for(int i =0;i<f->resultCount() / 2;i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString(""));*/
-
-    m_finder->predictiveSearchQuery( QString("533") );
-    QCOMPARE( m_finder->resultsCount(), 0 );
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    
-        //case 2
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    //see half of matched results
-    //results == for(int i =0;i<f->resultCount() / 2;i++){f->resultAt(i);}
-    /*QCOMPARE(m_finder->resultAt(0).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(0).lastName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).firstName().at(0).text(), QString(""));
-    QCOMPARE(m_finder->resultAt(1).lastName().at(0).text(), QString(""));*/
-
-    m_finder->predictiveSearchQuery( QString("50") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    m_finder->predictiveSearchQuery( QString("503") );
-    QCOMPARE( m_finder->resultsCount(), 1 );
-    m_finder->predictiveSearchQuery( QString("50") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-    m_finder->predictiveSearchQuery( QString("5") );
-    QCOMPARE( m_finder->resultsCount(), 2 );
-        
-}
-
-void st_LogsCntFinder::testQueryOrder()
+void ST_LogsCntFinder::testQueryOrder()
 {
     createContactsForQueryOrder();
 
@@ -602,65 +711,3 @@
     QCOMPARE(m_finder->resultAt(7).lastName().at(0).text(), QString("Yadira"));
 }
 
-void st_LogsCntFinder::createContactsForQueryOrder()
-{
-    createContacts();
-    createOneContact( QString("Anna"), QString("Qwerty"), QString("45789348") );
-    createOneContact( QString("Paula"), QString("Qwerty"), QString("78945617") );
-    createOneContact( QString("Paula"), QString("Azerty"), QString("78945617") );
-
-    int contactsCount = m_manager->contactIds().count();
-    QCOMPARE(contactsCount, 16);
-}
-
-//QTEST_MAIN(st_LogsCntFinder);
-
-/*int main(int argc, char *argv[])
-{
-    bool promptOnExit(true);
-    bool xmlOutput(false);
-
-    for (int i=0; i<argc; i++) {
-        if (QString(argv[i]) == "-noprompt") {
-            promptOnExit = false;
-        }
-        if (QString(argv[i]) == "-xml") {
-            xmlOutput = true;
-        }
-    }
-    printf("Running tests...\n");
-
-    QApplication app(argc, argv);
-    st_LogsCntFinder st_logscntfinder;
-    QString resultFileName = "c:/data/others/st_LogsCntFinder";
-    resultFileName.append(xmlOutput ? ".xml" : ".txt");
-    QStringList args_logsCntFinder("st_logscntfinder");
-    if (xmlOutput) 
-        args_logsCntFinder.append("-xml");
-    args_logsCntFinder << "-v1" << "-o" << resultFileName;
-    QTest::qExec(&st_logscntfinder, args_logsCntFinder);
-
-    if (xmlOutput) {
-        TestResultXmlParser parser;
-        parser.parseAndPrintResults(resultFileName);        
-    }
-    
-    if (promptOnExit) {
-        printf("Press any key...\n");
-        getchar(); 
-    }
-    
-    return 0;
-}*/
-
-int main(int argc, char *argv[]) //on HW
-{
-    QApplication app(argc, argv);
-    
-    st_LogsCntFinder st_logscntfinder;
-    QString resultFileName = "c:/data/others/st_logscntfinder.txt";
-    QStringList args_logsCntFinder( "st_logscntfinder");
-    args_logsCntFinder << "-o" << resultFileName;
-    QTest::qExec(&st_logscntfinder, args_logsCntFinder);
-    return 0;   
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinderqwerty.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,277 @@
+/*
+* 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 "st_logscntfinderqwerty.h"
+#include "testresultxmlparser.h"
+
+#include <qtcontacts.h>
+#include <QtTest/QtTest>
+#include <hbinputsettingproxy.h>
+
+
+#define ADD_CONTACT( id, first, last, pnumber, mail1, mail2, mail3 )\
+    QContact phonecontact##id;\
+    QContactName contactName##id;\
+    if ( QString( first).length() ) {\
+       contactName##id.setFirstName( first );\
+    }\
+    if ( QString( last ).length() ) {\
+       contactName##id.setLastName( last );\
+    }\
+    QVERIFY(phonecontact##id.saveDetail(&contactName##id));\
+    if ( QString( pnumber ).length() ) {\
+       QContactPhoneNumber number;\
+       number.setContexts("Home");\
+       number.setSubTypes("Mobile");\
+       number.setNumber( pnumber );\
+       phonecontact##id.saveDetail(&number);\
+    }\
+    if ( QString( mail1 ).length() ) {\
+       QContactEmailAddress email;\
+       email.setEmailAddress( mail1 );\
+       phonecontact##id.saveDetail(&email);\
+    }\
+    if ( QString( mail2 ).length() ) {\
+       QContactEmailAddress email;\
+       email.setEmailAddress( mail2 );\
+       phonecontact##id.saveDetail(&email);\
+    }\
+    if ( QString( mail3 ).length() ) {\
+       QContactEmailAddress email;\
+       email.setEmailAddress( mail3 );\
+       phonecontact##id.saveDetail(&email);\
+    }\
+    QVERIFY(m_manager->saveContact(&phonecontact##id))
+
+
+void ST_LogsCntFinderQwerty::initTestCase()
+{
+}
+
+void ST_LogsCntFinderQwerty::cleanupTestCase()
+{
+    
+}
+
+
+void ST_LogsCntFinderQwerty::init()
+{   
+    HbInputLanguage eng( QLocale::English );
+    HbInputSettingProxy::instance()->setGlobalInputLanguage( eng );
+    
+    //open symbian database
+    m_manager = new QContactManager("symbian");
+    
+    // Remove all contacts from the database
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds();
+    QVERIFY( m_manager->removeContacts(cnt_ids, 0 ) );
+    cnt_ids = m_manager->contactIds();
+    QCOMPARE(cnt_ids.count(), 0);
+    
+}
+
+void ST_LogsCntFinderQwerty::cleanup()
+{
+    delete m_manager;
+    m_manager = 0;
+    HbInputLanguage eng( QLocale::English );
+    HbInputSettingProxy::instance()->setGlobalInputLanguage( eng );
+    
+}
+
+void ST_LogsCntFinderQwerty::createContacts()
+{
+    
+    // Remove all contacts from the database
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds();
+    QVERIFY( m_manager->removeContacts(cnt_ids, 0 ) );
+    cnt_ids = m_manager->contactIds();
+    QVERIFY(0 == cnt_ids.count());
+    
+    //         'id' first      last           phonenumber        email1                        email2                      email3  
+    ADD_CONTACT( 1, "Stefann", "Yadira",      "0035893424558",   "syadira@gmail.com",          "stefann.yadira@nokia.com", "" );
+    ADD_CONTACT( 2, "",        "",            "00861048294754",  "company1@sohu.com",          "",                         "" );
+    ADD_CONTACT( 3, "Olga",    "",            "0938485604",      "olga089@ovi.com",            "test1@yahoo.com",          "olga.baranik.s@nordea.com" );
+    ADD_CONTACT( 4, "",        "Fesko",       "+35892874754",    "test2@ovi.com",              "",                         "" );
+    ADD_CONTACT( 5, "Petter",  "Harhai",      "0402348850",      "",                           "",                         "" );
+    ADD_CONTACT( 6, "Levis",   "Augustin Zi", "",                "levis.augustin.z@nokia.com", "laugustin@ovi.com",        "" );
+    ADD_CONTACT( 7, "Matt",    "Cook",        "",                "shymatt@live.com",           "",                         "" );
+    
+}
+
+
+/* expected results   
+    Search steps: search "s", contact (1 & 7) match;
+                  search "s ya", contact (1) match;
+                  search "syadira", contact (1) match;
+                  search "pett", no match;
+                  search "levis.augu_whatever", contact (6) match;
+                  search "olga.b", contact (3) match;
+*/
+
+
+//search "s", contact (1 & 7) match
+void ST_LogsCntFinderQwerty::testPredictiveEmailSearchNameAndEmailMatch()
+{
+
+    createContacts();
+    QEXPECT_FAIL("", "Not implemented", Abort );
+    
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QContactLocalId cid;
+    QContact contact;
+    QContactName contactName;
+
+    QString pattern = QString("s") + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds( df );
+    QCOMPARE( cnt_ids.count(), 2 );
+    cid = cnt_ids.at( 0 );    
+    contact = m_manager->contact( cid );
+    contactName = contact.detail( QContactName::DefinitionName );
+    QCOMPARE( contactName.value( QContactName::FieldFirstName ), QString("Matt" ) );
+    QCOMPARE( contact.details( QContactEmailAddress::DefinitionName ).count(), 1 );
+    QCOMPARE( contact.details( QContactEmailAddress::DefinitionName )[0].value( QContactEmailAddress::FieldEmailAddress ), QString( "shymatt@live.com" ) );
+    cid = cnt_ids.at( 1 );    
+    contact = m_manager->contact( cid  );
+    contactName = contact.detail( QContactName::DefinitionName );
+    QCOMPARE( contactName.value( QContactName::FieldFirstName ), QString("Stefann" ) );
+    QCOMPARE( contact.details( QContactEmailAddress::DefinitionName ).count(), 2 );
+    QCOMPARE( contact.details( QContactEmailAddress::DefinitionName )[0].value( QContactEmailAddress::FieldEmailAddress ), QString( "syadira@gmail.com" ) );
+    QCOMPARE( contact.details( QContactEmailAddress::DefinitionName )[1].value( QContactEmailAddress::FieldEmailAddress ), QString( "stefann.yadira@nokia.com" ) );
+}
+
+//search "s ya", contact (1) match
+void ST_LogsCntFinderQwerty::testPredictiveEmailSearchWithSpace()
+{
+
+    createContacts();
+    QEXPECT_FAIL("", "Not implemented", Abort );
+    
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QContactLocalId cid;
+    QContact contact;
+    QContactName contactName;
+
+    QString pattern = QString("s ya") + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds( df );
+    QCOMPARE( cnt_ids.count(), 1 );
+    cid = cnt_ids.at( 0 );    
+    contact = m_manager->contact( cid  );
+    contactName = contact.detail( QContactName::DefinitionName );
+    QCOMPARE( contactName.value( QContactName::FieldFirstName ), QString("Stefann" ) );
+    
+}
+
+//search "syadira", contact (1) match
+void ST_LogsCntFinderQwerty::testPredictiveEmailSearchEmailMatch()
+{
+
+    createContacts();
+    QEXPECT_FAIL("", "Not implemented", Abort );
+    
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QContactLocalId cid;
+    QContact contact;
+    QContactName contactName;
+
+    QString pattern = QString("syadira") + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds( df );
+    QCOMPARE( cnt_ids.count(), 1 );
+    cid = cnt_ids.at( 0 );    
+    contact = m_manager->contact( cid  );
+    contactName = contact.detail( QContactName::DefinitionName );
+    QCOMPARE( contactName.value( QContactName::FieldFirstName ), QString("Stefann" ) );
+}
+
+//search "pett", no match
+void ST_LogsCntFinderQwerty::testPredictiveEmailSearchNoEmails()
+{
+
+    createContacts();
+    QEXPECT_FAIL("", "Not implemented", Abort );
+    
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QContact contact;
+    QContactName contactName;
+
+    QString pattern = QString("pett") + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds( df );
+    QCOMPARE( cnt_ids.count(), 0 );
+    
+}
+
+//search "levis.augu_whatever", contact (6) match
+void ST_LogsCntFinderQwerty::testPredictiveEmailSearchOverLongPattern()
+{
+
+    createContacts();
+    QEXPECT_FAIL("", "Not implemented", Abort );
+    
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QContactLocalId cid;
+    QContact contact;
+    QContactName contactName;
+
+    QString pattern = QString("levis.augu_whatever") + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds( df );
+    QCOMPARE( cnt_ids.count(), 1 );
+    cid = cnt_ids.at( 0 );    
+    contact = m_manager->contact( cid  );
+    contactName = contact.detail( QContactName::DefinitionName );
+    QCOMPARE( contactName.value( QContactName::FieldFirstName ), QString("Levis" ) );
+}
+
+//search "olga.b", contact (3) match
+void ST_LogsCntFinderQwerty::testPredictiveEmailSearchSpecialCharsInPattern()
+{
+
+    createContacts();
+    QEXPECT_FAIL("", "Not implemented", Abort );
+    
+    QContactDetailFilter df;
+    df.setDetailDefinitionName(QContactName::DefinitionName, QContactEmailAddress::FieldEmailAddress );
+    df.setMatchFlags( QContactFilter::MatchKeypadCollation );
+    QContactLocalId cid;
+    QContact contact;
+    QContactName contactName;
+
+    //search "olga.b", contact (3) match
+    QString pattern = QString("olga.b") + QChar(30) + QString("vqwerty");
+    df.setValue( pattern );
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds( df );
+    QCOMPARE( cnt_ids.count(), 1 );
+    cid = cnt_ids.at( 0 );    
+    contact = m_manager->contact( cid  );
+    contactName = contact.detail( QContactName::DefinitionName );
+    QCOMPARE( contactName.value( QContactName::FieldFirstName ), QString("Olga" ) );
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/src/st_logscntfinderthai.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* 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 "st_logscntfinderthai.h"
+#include "logscntfinder.h"
+#include "testresultxmlparser.h"
+
+#include <qtcontacts.h>
+#include <QtTest/QtTest>
+#include <hbinputsettingproxy.h>
+
+void ST_LogsCntFinderThai::initTestCase()
+{
+}
+
+void ST_LogsCntFinderThai::cleanupTestCase()
+{
+    
+}
+
+
+void ST_LogsCntFinderThai::init()
+{   
+    HbInputLanguage eng( QLocale::Thai );
+    HbInputSettingProxy::instance()->setGlobalInputLanguage( eng );
+    
+    m_finder = 0;
+    //open symbian database
+    m_manager = new QContactManager("symbian");
+    m_finder = new LogsCntFinder(*m_manager);
+    QVERIFY(m_finder);
+    
+    // Remove all contacts from the database
+    QList<QContactLocalId> cnt_ids = m_manager->contactIds();
+    QVERIFY( m_manager->removeContacts(cnt_ids, 0 ) );
+    
+    cnt_ids = m_manager->contactIds();
+    QCOMPARE(cnt_ids.count(), 0);
+
+    for (int i = 0; i < 10; ++i) {
+        m_finder->predictiveSearchQuery( QString::number(i) );
+        QCOMPARE( m_finder->resultsCount(), 0 );
+    }
+}
+
+void ST_LogsCntFinderThai::cleanup()
+{
+    delete m_manager;
+    m_manager = 0;
+    delete m_finder;
+    m_finder = 0;
+    HbInputLanguage eng( QLocale::English );
+    HbInputSettingProxy::instance()->setGlobalInputLanguage( eng );
+    
+}
+
+void ST_LogsCntFinderThai::createThaiContacts()
+{
+    /*Create contacts in Contacts DB
+    */
+		
+    const QChar thaiFName1[] = {0x0E06,0x0E0A}; // map:23
+    const QChar thaiLName1[] = {0x0E0E,0x0E14,0x0E19,0x0E1E,0x0E23,0x0E2A };//map 456789
+    
+    QString first ( thaiFName1, 2 );
+    QString last ( thaiFName1, 6 );
+    createOneContact( first, last, QString("932472398") );
+		
+    const QChar thaiFName2[] = {0x0E30,0x0E0A};//#3, 
+    const QChar thaiLName2[] = {0x0E2F,0x0E14,0x0E19,0x0E1E,0x0E23,0x0E2A };//*56789
+    
+    QString first2 ( thaiFName1, 2 );
+    QString last2 ( thaiFName1, 6 );
+    createOneContact( first2, last2, QString("932472398") );
+   
+    int contactsCount = m_manager->contactIds().count();
+    QCOMPARE(contactsCount, 2);
+
+    
+}
+
+
+
+void ST_LogsCntFinderThai::createOneContact(QString firstname, QString Lastname, 
+                                                 QString phnumber)
+{
+    //Currenlty we can only fetch firstname,lastname,companyname and sip/email/phone from the databse
+    // so create contact with only these details
+    QContact phonecontact;
+    // Stefann Fedrernn +02644424423 ste.Fed@nokia.com
+    // Contact details
+    QContactName contactName;
+    contactName.setFirstName(firstname);
+    contactName.setLastName(Lastname);
+    phonecontact.saveDetail(&contactName);
+    
+    QContactPhoneNumber number;
+    number.setContexts("Home");
+    number.setSubTypes("Mobile");
+    number.setNumber(phnumber);
+    phonecontact.saveDetail(&number);
+    
+    m_manager->saveContact(&phonecontact);
+}
+
+
+
+//
+// Tests
+//
+
+void ST_LogsCntFinderThai::testPredictiveThaiSearchQuery()
+{
+    HbInputLanguage thai( QLocale::Thai );
+    HbInputSettingProxy::instance()->setGlobalInputLanguage( thai );
+    		  
+    createThaiContacts();
+
+    QEXPECT_FAIL("", "Not supported yet. Issues", Abort );
+    
+    //There is no recent call in logs UI
+    //case 1
+    m_finder->predictiveSearchQuery( QString("2") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+
+    m_finder->predictiveSearchQuery( QString("4") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+
+    m_finder->predictiveSearchQuery( QString("402") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+
+    m_finder->predictiveSearchQuery( QString("*4") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+
+    m_finder->predictiveSearchQuery( QString("*402###") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+
+    m_finder->predictiveSearchQuery( QString("*4***00002###") );
+    QCOMPARE( m_finder->resultsCount(), 1 );
+    
+    
+}
+
+
--- a/logsui/logscntfinder/tsrc/st_logscntfinder/st_logscntfinder.pro	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/st_logscntfinder/st_logscntfinder.pro	Fri Jun 11 13:38:41 2010 +0300
@@ -21,17 +21,14 @@
 QT += testlib xml
 CONFIG  += qtestlib
 CONFIG  += hb
-HB = hbcore hbinput 
+DEFINES += QT_NO_DEBUG_OUTPUT
 
-#include(../tsrc.pri)
-
-DEFINES += PBK_UNIT_TEST
 DEPENDPATH += .
 INCLUDEPATH += ./
 INCLUDEPATH += ./inc
 INCLUDEPATH += ../inc
 
-#DEPENDPATH += .
+DEPENDPATH += .
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 INCLUDEPATH += ../../
 INCLUDEPATH += ../../inc
@@ -39,18 +36,18 @@
 INCLUDEPATH += ../../../tsrc/qtestutils/inc
 
 # Input
-HEADERS += inc\st_logscntfinder.h 
+HEADERS += inc/st_logscntfinder.h 
+HEADERS += inc/st_logscntfinderqwerty.h 
+HEADERS += inc/st_logscntfinderthai.h
             
-SOURCES += src\st_logscntfinder.cpp   
+SOURCES += src/main.cpp   
+SOURCES += src/st_logscntfinder.cpp   
+SOURCES += src/st_logscntfinderqwerty.cpp
+SOURCES += src/st_logscntfinderthai.cpp
 SOURCES += ../../../tsrc/qtestutils/src/testresultxmlparser.cpp
 
 symbian: {
-    TARGET.UID2 = 0x100039CE
-    TARGET.UID3 = 0xEfa329b3
     TARGET.CAPABILITY = ALL -TCB
     TARGET.EPOCALLOWDLLDATA = 1
-    LIBS += \
-        -lxqservice \
-        -lQtContacts \
-        -llogscntfinder
+    LIBS += -lflogger -lqtcontacts -llogscntfinder
 }
--- a/logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logscntfinder/tsrc/stubs/qtcontacts_stubs.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -254,8 +254,7 @@
     }
     if ( definitionId == QContactAvatar::DefinitionName){
         QContactAvatar avatar;
-        avatar.setValue(QContactAvatar::FieldSubType, QContactAvatar::SubTypeImage );
-        avatar.setValue(QContactAvatar::FieldAvatar, "c:\\data\\images\\logstest1.jpg" );
+        avatar.setValue(QContactAvatar::FieldImageUrl, "c:\\data\\images\\logstest1.jpg" );
         return avatar;
     }
     QContactDetail detail;
--- a/logsui/logsengine/bwins/logsengineu.def	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/bwins/logsengineu.def	Fri Jun 11 13:38:41 2010 +0300
@@ -61,4 +61,8 @@
 	?clearList@LogsModel@@QAE_NW4ClearType@1@@Z @ 60 NONAME ; bool LogsModel::clearList(enum LogsModel::ClearType)
 	??1LogsContact@@UAE@XZ @ 61 NONAME ; LogsContact::~LogsContact(void)
 	?clearType@LogsFilter@@QBE?AW4ClearType@LogsModel@@XZ @ 62 NONAME ; enum LogsModel::ClearType LogsFilter::clearType(void) const
+	?logsDetailsModel@LogsModel@@QAEPAVLogsDetailsModel@@AAVLogsEvent@@@Z @ 63 NONAME ; class LogsDetailsModel * LogsModel::logsDetailsModel(class LogsEvent &)
+	?getLogsEvent@LogsDetailsModel@@QBE?AVLogsEvent@@XZ @ 64 NONAME ; class LogsEvent LogsDetailsModel::getLogsEvent(void) const
+	?serialize@LogsEvent@@QAE_NAAVQDataStream@@@Z @ 65 NONAME ; bool LogsEvent::serialize(class QDataStream &)
+	??0LogsEvent@@QAE@AAVQDataStream@@@Z @ 66 NONAME ; LogsEvent::LogsEvent(class QDataStream &)
 
--- a/logsui/logsengine/eabi/logsengineu.def	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/eabi/logsengineu.def	Fri Jun 11 13:38:41 2010 +0300
@@ -86,4 +86,9 @@
 	_ZNK9LogsEvent8durationEv @ 85 NONAME
 	_ZNK9LogsEvent9directionEv @ 86 NONAME
 	_ZNK9LogsEvent9eventTypeEv @ 87 NONAME
+	_ZN9LogsEvent9serializeER11QDataStream @ 88 NONAME
+	_ZN9LogsEventC1ER11QDataStream @ 89 NONAME
+	_ZN9LogsEventC2ER11QDataStream @ 90 NONAME
+	_ZN9LogsModel16logsDetailsModelER9LogsEvent @ 91 NONAME
+	_ZNK16LogsDetailsModel12getLogsEventEv @ 92 NONAME
 
--- a/logsui/logsengine/inc/logsdetailsmodel.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/inc/logsdetailsmodel.h	Fri Jun 11 13:38:41 2010 +0300
@@ -45,6 +45,7 @@
 
     LOGSENGINE_EXPORT void clearEvent();
     LOGSENGINE_EXPORT void getNumberToClipboard();
+    LOGSENGINE_EXPORT LogsEvent getLogsEvent() const;
     
 public: // From QAbstractItemModel
     
--- a/logsui/logsengine/inc/logseventdata.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/inc/logseventdata.h	Fri Jun 11 13:38:41 2010 +0300
@@ -23,6 +23,7 @@
 
 // FORWARD DECLARATION
 class CLogEvent;
+class QDataStream;
 
 // CLASS DECLARATION
 
@@ -43,6 +44,11 @@
          * Copy constructor.
          */
         LogsEventData( const LogsEventData& data );
+        
+        /**
+         * Construct from data stream
+         */
+        LogsEventData( QDataStream& serializedEvent );
 
        /**
         * Destructor.
@@ -79,6 +85,8 @@
             
         unsigned int contactLocalId() const;
         
+        bool serialize( QDataStream& serializeDestination );
+        
     private:
         
         void setContactLocalId( unsigned int id );
--- a/logsui/logsengine/logsengine.pro	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/logsengine.pro	Fri Jun 11 13:38:41 2010 +0300
@@ -19,7 +19,6 @@
 
 TARGET = logsengine
 CONFIG += hb dll svg
-RESOURCES += logsengine.qrc
 
 INCLUDEPATH += ./
 INCLUDEPATH += ./inc
--- a/logsui/logsengine/logsengine.qrc	Thu May 27 12:51:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-  <qresource prefix="/" >    
-    <file>themes/icons/hbdefault/scalable/qtg_large_missed_voice_call_unseen.svg</file>
-    <file>themes/icons/hbdefault/scalable/qtg_large_missed_video_call_unseen.svg</file>
-    <file>themes/icons/hbdefault/scalable/qtg_large_missed_voip_call_unseen.svg</file>
-  </qresource>
-</RCC>
--- a/logsui/logsengine/logssymbianos/inc/logsdbconnector.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/logssymbianos/inc/logsdbconnector.h	Fri Jun 11 13:38:41 2010 +0300
@@ -88,6 +88,13 @@
         void dataRemoved(QList<int> removedIndexes);
         
         /**
+         * Signaled once significant changes in data has occured.
+         * Corresponding changes have been already done to event array
+         * when this signal is emitted.
+         */
+        void dataReset();
+        
+        /**
          * Signaled once asycn event clearing has completed.
          * @param err, 0 if marking completed succesfully
          */
--- a/logsui/logsengine/logssymbianos/src/logsdbconnector.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/logssymbianos/src/logsdbconnector.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -475,7 +475,7 @@
             mAddedEventIndexes.append( mEvents.at(i)->index() );
         }
     }
-    
+
     bool doModelDataReset( !mRemovedEventIndexes.isEmpty() ||
                            !mAddedEventIndexes.isEmpty() || 
                            !mUpdatedEventIndexes.isEmpty() );
@@ -487,14 +487,25 @@
         }
     }
     
-    if ( !mRemovedEventIndexes.isEmpty() ){
-        emit dataRemoved(mRemovedEventIndexes);
-    }             
-    if ( !mAddedEventIndexes.isEmpty() ){
-        emit dataAdded(mAddedEventIndexes);
-    }
-    if ( !mUpdatedEventIndexes.isEmpty() ){
-        emit dataUpdated(mUpdatedEventIndexes);
+    int changeCount = 0;
+    changeCount += mRemovedEventIndexes.isEmpty() ? 0 : 1;
+    changeCount += mAddedEventIndexes.isEmpty() ? 0 : 1;
+    changeCount += mUpdatedEventIndexes.isEmpty() ? 0 : 1;
+    
+    if ( changeCount > 1 ){
+        // If having many changes, it is less error prone
+        // to just report reset.
+        emit dataReset();
+    } else {
+        if ( !mRemovedEventIndexes.isEmpty() ){
+            emit dataRemoved(mRemovedEventIndexes);
+        }             
+        if ( !mAddedEventIndexes.isEmpty() ){
+            emit dataAdded(mAddedEventIndexes);
+        }
+        if ( !mUpdatedEventIndexes.isEmpty() ){
+            emit dataUpdated(mUpdatedEventIndexes);
+        }
     }
     
     deleteRemoved(readCount);
--- a/logsui/logsengine/logssymbianos/tsrc/stubs/qtcontacts_stubs.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/logssymbianos/tsrc/stubs/qtcontacts_stubs.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -256,9 +256,9 @@
 
 QString QContactDetail::value(const QString& key) const
 {
-    if ( key == QContactName::FieldFirst ){
+    if ( key == QContactName::FieldFirstName ){
         return logsFirstName;
-    } else if ( key == QContactName::FieldLast ) {
+    } else if ( key == QContactName::FieldLastName ) {
         return logsLastName;
     } else if ( key == QContactPhoneNumber::FieldNumber ) {
         return QString( "12345" );
--- a/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsdbconnector.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsdbconnector.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -208,12 +208,14 @@
     QSignalSpy spyAdded(mDbConnector, SIGNAL(dataAdded(QList<int>)));
     QSignalSpy spyRemoved(mDbConnector, SIGNAL(dataRemoved(QList<int>)));
     QSignalSpy spyUpdated(mDbConnector, SIGNAL(dataUpdated(QList<int>)));
+    QSignalSpy spyReset(mDbConnector, SIGNAL(dataReset()));
 
     // No events, no signal
     mDbConnector->readCompleted(0);
     QVERIFY( spyAdded.count() == 0 );
     QVERIFY( spyRemoved.count() == 0 );
     QVERIFY( spyUpdated.count() == 0 );
+    QVERIFY( spyReset.count() == 0 );
     
     // Events exists, their indexes are signaled
     LOGS_TEST_CREATE_EVENT(event, 0, LogsEvent::EventAdded );
@@ -224,6 +226,7 @@
     QVERIFY( addedIndexes.at(0) == 0 );
     QVERIFY( spyRemoved.count() == 0 );
     QVERIFY( spyUpdated.count() == 0 );
+    QVERIFY( spyReset.count() == 0 );
     QVERIFY( mDbConnector->mEvents.count() == 1 );
     QVERIFY( mEvents.count() == 1 );
     
@@ -240,6 +243,7 @@
     QVERIFY( addedIndexes2.at(1) == 1 );
     QVERIFY( spyRemoved.count() == 0 );
     QVERIFY( spyUpdated.count() == 0 );
+    QVERIFY( spyReset.count() == 0 );
     QVERIFY( mDbConnector->mEvents.count() == 3 );
     QVERIFY( mEvents.count() == 3 );
     
@@ -251,6 +255,7 @@
     QVERIFY( spyAdded.count() == 2 );
     QVERIFY( spyRemoved.count() == 0 );
     QVERIFY( spyUpdated.count() == 1 );
+    QVERIFY( spyReset.count() == 0 );
     QList<int> updatedIndexes = qvariant_cast< QList<int> >(spyUpdated.at(0).at(0));
     QVERIFY( updatedIndexes.count() == 1 );
     QVERIFY( updatedIndexes.at(0) == 1 );
@@ -264,12 +269,24 @@
     QVERIFY( spyAdded.count() == 2 );
     QVERIFY( spyRemoved.count() == 1 );
     QVERIFY( spyUpdated.count() == 1 );
+    QVERIFY( spyReset.count() == 0 );
     QList<int> removedIndexes = qvariant_cast< QList<int> >(spyRemoved.at(0).at(0));
     QVERIFY( removedIndexes.count() == 1 );
     QVERIFY( removedIndexes.at(0) == 2 ); // index 2
     QVERIFY( mDbConnector->mEvents.count() == 2 );
     QVERIFY( mEvents.count() == 2 );
     
+    // Event added and removed, reset should be signaled
+    mDbConnector->mEvents.at(0)->mEventState = LogsEvent::EventAdded;
+    mDbConnector->mEvents.at(1)->mIsInView = false;
+    mDbConnector->readCompleted(1);
+    QVERIFY( spyAdded.count() == 2 );
+    QVERIFY( spyRemoved.count() == 1 );
+    QVERIFY( spyUpdated.count() == 1 );
+    QVERIFY( spyReset.count() == 1 );
+    QVERIFY( mDbConnector->mEvents.count() == 1 );
+    QVERIFY( mEvents.count() == 1 );
+
     // Read completed when compression is enabled, reader is stopped
     QVERIFY( mDbConnector->init() == 0 );
     QVERIFY( mDbConnector->start() == 0 );
--- a/logsui/logsengine/src/logsdetailsmodel.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/src/logsdetailsmodel.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -292,6 +292,15 @@
 //
 // -----------------------------------------------------------------------------
 //
+LogsEvent LogsDetailsModel::getLogsEvent() const
+{
+    return *mEvent;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 bool LogsDetailsModel::isAddress(QString value) const
 {
 	QChar c('@');
--- a/logsui/logsengine/src/logsevent.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/src/logsevent.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -24,6 +24,7 @@
 #include <qcontactname.h>
 #include <qcontactonlineaccount.h>
 #include <hbglobal.h>
+#include <QDataStream>
 #include "logsevent.h"
 #include "logseventparser.h"
 #include "logseventdata.h"
@@ -347,6 +348,85 @@
 }
 
 // ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+LogsEvent::LogsEvent( QDataStream& serializedEvent )
+{
+    LOGS_QDEBUG( "logs [ENG] -> LogsEvent::LogsEvent deserialize")
+    serializedEvent >> mLogId;
+    int tempEnum;
+    serializedEvent >> tempEnum;
+    mDirection = static_cast<LogsEvent::LogsDirection>( tempEnum );
+    serializedEvent >> tempEnum;
+    mEventType = static_cast<LogsEvent::LogsEventType>( tempEnum );
+    serializedEvent >> mUid;
+    
+    serializedEvent >> mRemoteParty;
+    serializedEvent >> mNumber;
+    serializedEvent >> mDuplicates;
+    serializedEvent >> mTime;
+    serializedEvent >> mRingDuration;
+    serializedEvent >> mIsRead;  
+    serializedEvent >> mIsALS;
+    serializedEvent >> mDuration;
+          
+    serializedEvent >> mIndex;
+    serializedEvent >> mIsInView;
+    serializedEvent >> tempEnum;
+    mEventState = static_cast<LogsEvent::LogsEventState>( tempEnum );
+    serializedEvent >> mIsLocallySeen;
+    serializedEvent >> mIsPrivate;
+    serializedEvent >> mIsUnknown;
+    
+    LogsEventData* logsEventData = new LogsEventData(serializedEvent);
+    if ( serializedEvent.status() == QDataStream::ReadPastEnd ){
+        mLogsEventData = 0;
+        delete logsEventData;
+    } else {
+        mLogsEventData = logsEventData;
+    }
+    LOGS_QDEBUG( "logs [ENG] <- LogsEvent::LogsEvent deserialize")
+    
+}
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+bool LogsEvent::serialize( QDataStream& serializeDestination )
+{
+    LOGS_QDEBUG( "logs [ENG] -> LogsEvent::serialize")
+    serializeDestination << mLogId;
+    serializeDestination << mDirection;
+    serializeDestination << mEventType;
+    serializeDestination << mUid;
+    
+    serializeDestination << mRemoteParty;
+    serializeDestination << mNumber;
+    serializeDestination << mDuplicates;
+    serializeDestination << mTime;
+    serializeDestination << mRingDuration;
+    serializeDestination << mIsRead;  
+    serializeDestination << mIsALS;
+    serializeDestination << mDuration;
+       
+    serializeDestination << mIndex;
+    serializeDestination << mIsInView;
+    serializeDestination << mEventState;
+    serializeDestination << mIsLocallySeen;
+    serializeDestination << mIsPrivate;
+    serializeDestination << mIsUnknown; 
+    
+    if ( mLogsEventData ){
+        mLogsEventData->serialize(serializeDestination);
+    }
+    
+    LOGS_QDEBUG( "logs [ENG] <- LogsEvent::serialize")
+    return true;
+}
+        
+// ----------------------------------------------------------------------------
 // LogsEvent::RingDuration
 //
 // For ring duation feature
@@ -560,8 +640,8 @@
 //
 QString LogsEvent::parseContactName(const QContactName& name)
 {
-    QString firstName = name.value(QContactName::FieldFirst);
-    QString lastName = name.value(QContactName::FieldLast);
+    QString firstName = name.value(QContactName::FieldFirstName);
+    QString lastName = name.value(QContactName::FieldLastName);
     QString parsedName;
     if (!lastName.isEmpty()) {
         if (!firstName.isEmpty()) {
--- a/logsui/logsengine/src/logseventdata.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/src/logseventdata.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -19,9 +19,11 @@
 #include "logseventdata.h"
 #include "logsevent.h"
 #include "logseventdataparser.h"
+#include "logslogger.h"
 
 #include <QRegExp>
 #include <QRegExpValidator>
+#include <QDataStream>
 
 // ----------------------------------------------------------------------------
 // LogsEventData::LogsEventData
@@ -64,6 +66,56 @@
 }
 
 // ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+LogsEventData::LogsEventData( QDataStream& serializedEvent )
+{
+    LOGS_QDEBUG( "logs [ENG] -> LogsEventData::LogsEventData deserialize")
+        
+    serializedEvent >> mIsCNAP;
+    serializedEvent >> mIsVT;
+    serializedEvent >> mIsPoC;
+    serializedEvent >> mIsVoIP;
+    serializedEvent >> mIsEmerg;
+    serializedEvent >> mDataSent;
+    serializedEvent >> mDataReceived;        
+    serializedEvent >> mMsgPartsNumber;            
+    serializedEvent >> mServiceId;
+    serializedEvent >> mContactLocalId;
+    serializedEvent >> mRemoteUrl;
+    serializedEvent >> mLocalUrl;
+    
+    LOGS_QDEBUG( "logs [ENG] <- LogsEventData::LogsEventData deserialize")
+    
+}
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+bool LogsEventData::serialize( QDataStream& serializeDestination )
+{
+    LOGS_QDEBUG( "logs [ENG] -> LogsEventData::serialize")
+        
+    serializeDestination << mIsCNAP;
+    serializeDestination << mIsVT;
+    serializeDestination << mIsPoC;
+    serializeDestination << mIsVoIP;
+    serializeDestination << mIsEmerg;
+    serializeDestination << mDataSent;
+    serializeDestination << mDataReceived;        
+    serializeDestination << mMsgPartsNumber;            
+    serializeDestination << mServiceId;
+    serializeDestination << mContactLocalId;
+    serializeDestination << mRemoteUrl;
+    serializeDestination << mLocalUrl;
+    
+    LOGS_QDEBUG( "logs [ENG] <- LogsEventData::serialize")
+    return true;
+}
+
+// ----------------------------------------------------------------------------
 // LogsEventData::~LogsEventData
 // ----------------------------------------------------------------------------
 //
--- a/logsui/logsengine/src/logsmodel.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/src/logsmodel.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -59,6 +59,9 @@
             this, SLOT( dataUpdated(QList<int>) ));
     connect( mDbConnector, SIGNAL( dataRemoved(QList<int>) ), 
             this, SLOT( dataRemoved(QList<int>) ));
+    connect( mDbConnector, SIGNAL( dataReset() ), 
+                this, SLOT( resetModel() ));
+    
     connect( hbInstance->theme(), SIGNAL ( changeFinished() ),
             this, SLOT ( resetModel()));
     mDbConnector->init();
@@ -183,6 +186,16 @@
 }
 
 // -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsDetailsModel* LogsModel::logsDetailsModel(LogsEvent& event)
+{
+    LOGS_QDEBUG( "logs [ENG] -> LogsModel::logsDetailsModel()" )
+    return new LogsDetailsModel( *mDbConnector, event );
+}
+
+// -----------------------------------------------------------------------------
 // From QAbstractListModel
 // -----------------------------------------------------------------------------
 //
@@ -387,7 +400,9 @@
 //
 void LogsModel::resetModel()
 {
-   this->reset();
+    LOGS_QDEBUG( "logs [ENG] -> LogsModel::resetModel()" )
+    this->reset();
+    LOGS_QDEBUG( "logs [ENG] <- LogsModel::resetModel()" )
 }
 // -----------------------------------------------------------------------------
 //
--- a/logsui/logsengine/themes/icons/hbdefault/scalable/qtg_large_missed_video_call_unseen.svg	Thu May 27 12:51:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg baseProfile="tiny" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g>
-<linearGradient gradientTransform="matrix(0.2118 0.9773 -0.9773 0.2118 -634.5609 -270.4865)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="422.2207" x2="428.7761" y1="-578.2104" y2="-582.472">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.1333" style="stop-color:#FFBE82"/>
-<stop offset="0.6303" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</linearGradient>
-<path d="M18.469,33.146c2.09-3.596,4.591-6.497,7.281-9.19c2.594-2.589,6.72-5.299,8.562-6.254L43.916,7.42  c-0.846-0.3-3.693-0.465-7.279,0.616c-3.588,1.083-11.736,6.302-16.979,11.547C14.416,24.83,9.932,31.93,9.077,34.178  c-1.343,3.541-1.222,7.445-0.929,8.58c0,0,0.34,1.035,1.145,2.377C9.636,45.711,18.469,33.146,18.469,33.146z" fill="url(#SVGID_1_)"/>
-<path d="M30.573,20.037c1.488-1.037,2.869-1.883,3.74-2.335l9.346-10.006  c-0.131-0.057-0.209-0.088-0.209-0.088c-0.246-0.088-0.641-0.162-1.123-0.218c-0.793,0.005-1.596,0.093-2.402,0.27  C34.23,8.909,30.409,14.194,30.573,20.037z" fill="#020202" fill-opacity="0.05" stroke-opacity="0.05"/>
-<path d="M31.295,19.542c1.205-0.809,2.291-1.462,3.018-1.84l9.377-10.04  c-0.146-0.063-0.234-0.098-0.234-0.098c-0.232-0.08-0.604-0.152-1.061-0.203c-0.75,0.006-1.508,0.087-2.27,0.253  C34.664,8.813,31.023,13.932,31.295,19.542z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<path d="M43.467,7.499c-0.209-0.073-0.549-0.137-0.963-0.186c-0.68,0.006-1.369,0.08-2.059,0.231  c-5.088,1.116-8.426,5.984-7.977,11.233c0.725-0.455,1.363-0.826,1.844-1.076l9.422-10.088C43.566,7.538,43.467,7.499,43.467,7.499z  " fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<radialGradient cx="46.6523" cy="-5.2056" gradientTransform="matrix(0.6122 0 0 0.6122 11.7943 11.6322)" gradientUnits="userSpaceOnUse" id="SVGID_2_" r="20.0698">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6242" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</radialGradient>
-<path d="M34.313,17.702l0.928,1.55c0,0,15.102-6.784,14.084-8.039c-0.514-0.631-0.576-0.656-1.238-1.262  c-1.984-1.815-4.17-2.531-4.17-2.531C43.73,7.357,43.434,7.3,43.07,7.258c-0.596,0.005-1.199,0.069-1.805,0.202  c-4.592,1.008-7.572,5.5-6.965,10.256C34.305,17.713,34.309,17.706,34.313,17.702z" fill="url(#SVGID_2_)"/>
-<path d="M16.873,33.344c-0.989-0.141-2.008-0.121-3.028,0.104c-2.417,0.531-4.375,2.066-5.646,4.131  c-0.367,2.35-0.25,4.408-0.05,5.18c0,0,0.34,1.035,1.145,2.377c0.289,0.484,6.539-8.264,8.555-11.107L16.873,33.344z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<path d="M17.755,33.373c-0.989-0.141-2.008-0.119-3.029,0.104c-3.313,0.727-5.776,3.332-6.76,6.623  C7.94,41.125,8,41.973,8.093,42.498c0.002,0.012,0.005,0.033,0.01,0.047c0,0,0.339,1.033,1.143,2.379  c0.3,0.498,6.981-8.887,8.75-11.383L17.755,33.373z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<radialGradient cx="437.749" cy="-560.2109" gradientTransform="matrix(0.1283 0.5992 -0.5928 0.13 -373.5847 -154.0506)" gradientUnits="userSpaceOnUse" id="SVGID_3_" r="23.8799">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6242" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</radialGradient>
-<path d="M10.591,46.975c0.616,0.74,0.646,0.955,1.294,1.525c1.195,1.055,9.301-13.613,9.301-13.613  l-2.683-1.719c-0.941-0.111-1.913-0.08-2.889,0.135c-4.777,1.049-7.806,5.869-6.87,10.832C9.138,44.922,9.736,45.947,10.591,46.975z  " fill="url(#SVGID_3_)"/>
-<path d="M49.324,11.213c-0.178-0.219-0.381-0.445-0.578-0.669l-13.943,7.958l0.438,0.749  C35.24,19.252,50.342,12.468,49.324,11.213z" fill="#020202" fill-opacity="0.4" stroke-opacity="0.4"/>
-<linearGradient gradientTransform="matrix(0.2118 0.9773 -0.9773 0.2118 -634.5599 -270.4865)" gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="421.4131" x2="426.6039" y1="-610.4937" y2="-594.0048">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6788" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</linearGradient>
-<path d="M35.24,19.252l1.178,1.98c0.301,0.515,0.973,0.673,1.57,0.423l4.09-2.335l8.043-4.667  c0.631-0.363,0.877-1.12,0.549-1.685c0,0-0.334-0.501-1.35-1.752L35.24,19.252z" fill="url(#SVGID_4_)"/>
-<path d="M21.186,34.887l-0.725-0.473l-9.214,13.488c0.215,0.203,0.429,0.412,0.638,0.598  C13.081,49.555,21.186,34.887,21.186,34.887z" fill="#020202" fill-opacity="0.4" stroke-opacity="0.4"/>
-<linearGradient gradientTransform="matrix(0.2118 0.9773 -0.9773 0.2118 -634.5599 -270.4865)" gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="438.8232" x2="450.6482" y1="-577.3184" y2="-564.2958">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6788" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</linearGradient>
-<path d="M11.887,48.498c1.193,1.051,1.685,1.371,1.685,1.371c0.568,0.367,1.363,0.168,1.781-0.443  l7.901-11.605c0.418-0.615,0.307-1.412-0.261-1.777l-1.808-1.156L11.887,48.498z" fill="url(#SVGID_5_)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_6_" x1="39.1182" x2="44.145" y1="48.6309" y2="48.6309">
-<stop offset="0" style="stop-color:#878A8C"/>
-<stop offset="0.2606" style="stop-color:#BDC2C4"/>
-<stop offset="0.6606" style="stop-color:#5B6163"/>
-<stop offset="1" style="stop-color:#959A9C"/>
-</linearGradient>
-<rect fill="url(#SVGID_6_)" height="7.535" width="4.896" x="39.184" y="44.863"/>
-<path d="M39.184,49.596c0.787,0.189,1.604,0.303,2.449,0.303c0.844,0,1.662-0.113,2.447-0.303v-4.121  h-4.896V49.596z" fill="#020202" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M39.184,48.982c0.787,0.191,1.604,0.303,2.449,0.303c0.844,0,1.662-0.111,2.447-0.303v-4.119  h-4.896V48.982z" fill="#020202" fill-opacity="0.2" stroke-opacity="0.2"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_7_" x1="41.6328" x2="41.6328" y1="27.8325" y2="48.6499">
-<stop offset="0" style="stop-color:#F2F2F2"/>
-<stop offset="0.3212" style="stop-color:#E6E6E6"/>
-<stop offset="1" style="stop-color:#666666"/>
-</linearGradient>
-<path d="M41.633,48.674c-5.74,0-10.408-4.67-10.408-10.408c0-5.74,4.668-10.409,10.408-10.409  c5.738,0,10.408,4.668,10.408,10.409C52.041,44.004,47.371,48.674,41.633,48.674L41.633,48.674z" fill="url(#SVGID_7_)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_8_" x1="41.6318" x2="41.6318" y1="28.4473" y2="48.0381">
-<stop offset="0" style="stop-color:#D1D7D9"/>
-<stop offset="0.0667" style="stop-color:#D1D7D9"/>
-<stop offset="0.2606" style="stop-color:#BDC2C4"/>
-<stop offset="0.6606" style="stop-color:#7C8487"/>
-<stop offset="1" style="stop-color:#ADB3B5"/>
-</linearGradient>
-<circle cx="41.632" cy="38.266" fill="url(#SVGID_8_)" r="9.796"/>
-<path d="M41.633,47.037c-5.102,0-9.268-4.059-9.445-9.115c-0.004,0.111-0.008,0.223-0.008,0.334  c0,5.211,4.24,9.451,9.453,9.451c5.211,0,9.451-4.24,9.451-9.451c0-0.111-0.004-0.223-0.008-0.334  C50.898,42.979,46.732,47.037,41.633,47.037z" fill="#FFFFFF" fill-opacity="0.1" stroke-opacity="0.1"/>
-<path d="M49.592,37.848c0,4.516-3.564,8.969-7.963,8.967c-4.395-0.002-7.957-4.457-7.957-8.971  c0.004-4.516,3.568-8.172,7.963-8.172C46.029,29.675,49.594,33.334,49.592,37.848z" fill="#231F20" fill-opacity="0.3" stroke-opacity="0.3"/>
-<path d="M41.629,46.15c-2.291,0-4.443-0.893-6.061-2.512c-1.619-1.619-2.51-3.773-2.508-6.063  c0-4.725,3.846-8.567,8.572-8.567c2.291,0,4.443,0.893,6.063,2.512c1.619,1.619,2.51,3.771,2.508,6.063  c0,4.725-3.846,8.566-8.57,8.566H41.629z" fill="#231F20" fill-opacity="0.2" stroke-opacity="0.2"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_9_" x1="41.6318" x2="41.6318" y1="29.5093" y2="45.4663">
-<stop offset="0" style="stop-color:#CFCFCF"/>
-<stop offset="0.1091" style="stop-color:#CFCFCF"/>
-<stop offset="0.6848" style="stop-color:#121212"/>
-<stop offset="1" style="stop-color:#A6A6A6"/>
-</linearGradient>
-<path d="M41.629,45.539c-2.127-0.002-4.125-0.83-5.629-2.334c-1.502-1.502-2.328-3.502-2.328-5.629  c0-4.387,3.572-7.956,7.961-7.956c2.127,0,4.125,0.83,5.629,2.333c1.504,1.504,2.33,3.504,2.33,5.631  c-0.002,4.387-3.572,7.955-7.959,7.955H41.629z" fill="url(#SVGID_9_)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_10_" x1="41.6318" x2="41.6318" y1="30.1289" y2="44.8584">
-<stop offset="0" style="stop-color:#F2F2F2"/>
-<stop offset="1" style="stop-color:#606769"/>
-</linearGradient>
-<circle cx="41.632" cy="37.58" fill="url(#SVGID_10_)" r="7.347"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_11_" x1="41.6318" x2="41.6318" y1="31.4756" y2="43.6433">
-<stop offset="0" style="stop-color:#1A1A1A"/>
-<stop offset="0.503" style="stop-color:#343434"/>
-<stop offset="0.7515" style="stop-color:#9E9E9E"/>
-<stop offset="1" style="stop-color:#CFCFCF"/>
-</linearGradient>
-<path d="M41.633,43.701c-1.639,0-3.176-0.639-4.332-1.795c-1.154-1.156-1.791-2.693-1.791-4.33  c0-3.373,2.746-6.119,6.123-6.119c1.637,0,3.174,0.637,4.33,1.795c1.156,1.156,1.793,2.693,1.791,4.33  C47.754,40.957,45.008,43.701,41.633,43.701L41.633,43.701z" fill="url(#SVGID_11_)"/>
-<radialGradient cx="59.5957" cy="40.5771" gradientTransform="matrix(0.621 1.836735e-004 -1.836735e-004 0.6209 5.2261 12.8455)" gradientUnits="userSpaceOnUse" id="SVGID_12_" r="10.1859">
-<stop offset="0" style="stop-color:#000000"/>
-<stop offset="0.5917" style="stop-color:#000000"/>
-<stop offset="0.627" style="stop-color:#050505"/>
-<stop offset="0.7652" style="stop-color:#121212"/>
-<stop offset="0.8876" style="stop-color:#171717"/>
-<stop offset="1" style="stop-color:#171717"/>
-</radialGradient>
-<circle cx="41.632" cy="37.579" fill="url(#SVGID_12_)" r="5.511"/>
-<radialGradient cx="53.6738" cy="32.9404" gradientTransform="matrix(0.621 0 0 0.6209 5.811 13.4188)" gradientUnits="userSpaceOnUse" id="SVGID_13_" r="16.2221">
-<stop offset="0" style="stop-color:#242424"/>
-<stop offset="0.4303" style="stop-color:#242424"/>
-<stop offset="0.7818" style="stop-color:#000000"/>
-<stop offset="1" style="stop-color:#000000"/>
-</radialGradient>
-<circle cx="41.633" cy="37.58" fill="url(#SVGID_13_)" r="4.521"/>
-<radialGradient cx="56.7607" cy="30.0415" gradientTransform="matrix(0.621 1.836735e-004 -1.836735e-004 0.6209 5.2261 12.8455)" gradientUnits="userSpaceOnUse" id="SVGID_14_" r="17.797">
-<stop offset="0" style="stop-color:#A700F5"/>
-<stop offset="0.3091" style="stop-color:#A700F5"/>
-<stop offset="0.4364" style="stop-color:#5E008A"/>
-<stop offset="0.8061" style="stop-color:#0E1402"/>
-<stop offset="1" style="stop-color:#0E1402"/>
-</radialGradient>
-<path d="M45.672,37.58c0,2.232-1.809,4.041-4.041,4.039c-2.232,0-4.041-1.811-4.041-4.041  c0.002-2.232,1.813-4.039,4.041-4.039C43.865,33.541,45.676,35.35,45.672,37.58z" fill="url(#SVGID_14_)"/>
-<radialGradient cx="58.6514" cy="45.2432" gradientTransform="matrix(0.621 1.836735e-004 -1.836735e-004 0.6209 5.2261 12.8455)" gradientUnits="userSpaceOnUse" id="SVGID_15_" r="7.2256">
-<stop offset="0" style="stop-color:#48630C"/>
-<stop offset="0.7879" style="stop-color:#000000"/>
-<stop offset="1" style="stop-color:#000000"/>
-</radialGradient>
-<path d="M45.672,37.58c0,2.232-1.809,4.041-4.041,4.039c-2.232,0-4.041-1.811-4.041-4.041  c0,0,1.385,2.465,4.041,2.465S45.672,37.58,45.672,37.58z" fill="url(#SVGID_15_)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_16_" x1="41.6123" x2="41.6123" y1="32.7168" y2="37.5411">
-<stop offset="0" style="stop-color:#F8FBFF"/>
-<stop offset="1" style="stop-color:#808080"/>
-</linearGradient>
-<path d="M41.611,37.518c1.754,0,3.404-0.264,4.863-0.732  c-0.414-2.313-2.432-4.068-4.863-4.068c-2.43,0-4.445,1.756-4.861,4.068C38.207,37.254,39.859,37.518,41.611,37.518z" fill="url(#SVGID_16_)" fill-opacity="0.35" stroke-opacity="0.35"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_17_" x1="32.7676" x2="50.541" y1="51.5801" y2="51.5801">
-<stop offset="0" style="stop-color:#878A8C"/>
-<stop offset="0.2606" style="stop-color:#BDC2C4"/>
-<stop offset="0.6606" style="stop-color:#5B6163"/>
-<stop offset="1" style="stop-color:#959A9C"/>
-</linearGradient>
-<path d="M50.502,52.805c0.025-0.609,0.039-0.486,0.039-0.613v-0.033c0-0.996-0.816-1.803-1.824-1.803H34.592  c-1.008,0-1.824,0.807-1.824,1.803v0.033c0,0.127,0.014,0.004,0.039,0.613H50.502z" fill="url(#SVGID_17_)"/>
-<path d="M32.881,51.557H50.43c-0.08-0.225-0.203-0.426-0.361-0.6H33.242  C33.084,51.131,32.961,51.332,32.881,51.557z" fill="#FFFFFF" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M32.777,52.191c0.008,0.125,0.016,0.309,0.029,0.613h17.695  c0.012-0.305,0.021-0.488,0.027-0.613H32.777z" fill="#020202" fill-opacity="0.2" stroke-opacity="0.2"/>
-<path d="M33.24,50.957h16.826c-0.332-0.367-0.811-0.602-1.35-0.602H34.592  C34.053,50.355,33.574,50.59,33.24,50.957z" fill="#FFFFFF" fill-opacity="0.4" stroke-opacity="0.4"/>
-<rect fill="none" height="60" width="60"/>
-</g>
-<g>
-<rect fill="none" height="30" width="30"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1__" x1="15.0005" x2="15.0005" y1="4.5283" y2="27.0492">
-<stop offset="0" style="stop-color:#FF7042"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<path d="M19.018,16.846v-4.316h4.535l-8.512-8.844l-8.592,8.844h4.631v4.316  c0,7.293,6.068,9.467,11.908,9.467v-6.422C21.189,19.891,19.018,19.002,19.018,16.846z" fill="url(#SVGID_1__)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2__" x1="15.0005" x2="15.0005" y1="4.0146" y2="12.8168">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<polygon fill="url(#SVGID_2__)" points="15.041,4.508 22.762,12.529 23.553,12.529 15.041,3.686 6.449,12.529 7.248,12.529 "/>
-</g>
-</svg>
--- a/logsui/logsengine/themes/icons/hbdefault/scalable/qtg_large_missed_voice_call_unseen.svg	Thu May 27 12:51:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg baseProfile="tiny" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g>
-<linearGradient gradientTransform="matrix(0.2118 0.9773 -0.9773 0.2118 -634.5609 -270.4865)" gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="423.0967" x2="429.6527" y1="-578.646" y2="-582.908">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6061" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<path d="M19.081,33.911c2.089-3.597,4.591-6.497,7.281-9.189c2.593-2.591,6.72-5.3,8.562-6.256l9.604-10.282  c-0.845-0.3-3.693-0.464-7.279,0.616c-3.586,1.083-11.736,6.303-16.979,11.547c-5.242,5.246-9.727,12.347-10.581,14.595  c-1.343,3.541-1.221,7.445-0.929,8.581c0,0,0.34,1.034,1.144,2.377C10.248,46.476,19.081,33.911,19.081,33.911z" fill="url(#SVGID_1_)"/>
-<path d="M31.184,20.8c1.488-1.036,2.87-1.882,3.74-2.334L44.271,8.46  c-0.132-0.058-0.209-0.088-0.209-0.088c-0.247-0.088-0.642-0.162-1.124-0.219c-0.793,0.006-1.596,0.093-2.401,0.27  C34.843,9.673,31.019,14.958,31.184,20.8z" fill="#020202" fill-opacity="0.05" stroke-opacity="0.05"/>
-<path d="M31.906,20.306c1.205-0.809,2.291-1.462,3.018-1.84l9.377-10.04  c-0.146-0.063-0.233-0.098-0.233-0.098c-0.231-0.08-0.604-0.152-1.06-0.203c-0.751,0.006-1.51,0.087-2.27,0.253  C35.275,9.576,31.636,14.695,31.906,20.306z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<path d="M44.079,8.263c-0.21-0.073-0.55-0.137-0.962-0.186c-0.681,0.006-1.369,0.08-2.06,0.231  c-5.087,1.116-8.426,5.984-7.978,11.233c0.725-0.455,1.363-0.826,1.844-1.076l9.424-10.088C44.178,8.302,44.079,8.263,44.079,8.263z  " fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<radialGradient cx="43.3906" cy="8.9175" gradientUnits="userSpaceOnUse" id="SVGID_2_" r="18.5073">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6061" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</radialGradient>
-<path d="M34.924,18.466l0.929,1.55c0,0,15.101-6.784,14.084-8.038c-0.513-0.631-0.577-0.656-1.237-1.263  c-1.985-1.815-4.172-2.531-4.172-2.531c-0.186-0.063-0.481-0.12-0.845-0.161c-0.596,0.004-1.2,0.068-1.806,0.201  c-4.591,1.009-7.57,5.501-6.963,10.257C34.916,18.477,34.921,18.47,34.924,18.466z" fill="url(#SVGID_2_)"/>
-<path d="M17.483,34.106c-0.988-0.14-2.007-0.119-3.027,0.105c-2.418,0.53-4.376,2.066-5.646,4.131  c-0.367,2.35-0.25,4.407-0.05,5.18c0,0,0.34,1.034,1.144,2.377c0.29,0.482,6.54-8.264,8.556-11.107L17.483,34.106z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<path d="M18.366,34.136c-0.989-0.14-2.008-0.118-3.029,0.105c-3.313,0.727-5.775,3.332-6.76,6.623  c-0.026,1.025,0.034,1.872,0.127,2.397c0.003,0.013,0.005,0.034,0.01,0.048c0,0,0.34,1.033,1.144,2.379  c0.3,0.498,6.981-8.888,8.75-11.384L18.366,34.136z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<radialGradient cx="437.4258" cy="-571.231" gradientTransform="matrix(0.2095 0.9787 -0.9682 0.2124 -629.4526 -270.6148)" gradientUnits="userSpaceOnUse" id="SVGID_3_" r="14.6198">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.6061" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</radialGradient>
-<path d="M11.202,47.738c0.616,0.74,0.646,0.954,1.295,1.524c1.194,1.055,9.301-13.612,9.301-13.612  l-2.683-1.719c-0.941-0.111-1.914-0.079-2.89,0.136c-4.777,1.048-7.806,5.868-6.87,10.832C9.749,45.686,10.349,46.71,11.202,47.738z  " fill="url(#SVGID_3_)"/>
-<path d="M49.937,11.978c-0.179-0.22-0.381-0.446-0.578-0.67l-13.944,7.959l0.438,0.749  C35.853,20.016,50.953,13.231,49.937,11.978z" fill="#020202" fill-opacity="0.4" stroke-opacity="0.4"/>
-<linearGradient gradientTransform="matrix(0.2118 0.9773 -0.9773 0.2118 -634.5599 -270.4865)" gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="422.2881" x2="427.4786" y1="-610.9287" y2="-594.4409">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.8121" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<path d="M35.853,20.016l1.178,1.981c0.302,0.515,0.972,0.674,1.569,0.422l4.09-2.334l8.043-4.668  c0.632-0.363,0.878-1.119,0.549-1.686c0,0-0.333-0.501-1.349-1.751L35.853,20.016z" fill="url(#SVGID_4_)"/>
-<path d="M21.798,35.65l-0.725-0.472l-9.215,13.486c0.216,0.204,0.43,0.414,0.639,0.598  C13.691,50.317,21.798,35.65,21.798,35.65z" fill="#020202" fill-opacity="0.4" stroke-opacity="0.4"/>
-<linearGradient gradientTransform="matrix(0.2118 0.9773 -0.9773 0.2118 -634.5599 -270.4865)" gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="439.6982" x2="451.5232" y1="-577.7549" y2="-564.7323">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.8121" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<path d="M12.498,49.262c1.193,1.05,1.686,1.37,1.686,1.37c0.567,0.367,1.363,0.169,1.781-0.442l7.9-11.605  c0.419-0.614,0.307-1.411-0.26-1.777l-1.808-1.156L12.498,49.262z" fill="url(#SVGID_5_)"/>
-<rect fill="none" height="60" width="60"/>
-</g>
-<g>
-<rect fill="none" height="30" width="30"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1__" x1="15.0005" x2="15.0005" y1="4.5283" y2="27.0492">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<path d="M19.018,16.846v-4.316h4.535l-8.512-8.844l-8.592,8.844h4.631v4.316  c0,7.293,6.068,9.467,11.908,9.467v-6.422C21.189,19.891,19.018,19.002,19.018,16.846z" fill="url(#SVGID_1__)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2__" x1="15.0005" x2="15.0005" y1="4.0146" y2="12.8168">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<polygon fill="url(#SVGID_2__)" points="15.041,4.508 22.762,12.529 23.553,12.529 15.041,3.686 6.449,12.529 7.248,12.529 "/>
-</g>
-</svg>
--- a/logsui/logsengine/themes/icons/hbdefault/scalable/qtg_large_missed_voip_call_unseen.svg	Thu May 27 12:51:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg baseProfile="tiny" height="60" viewBox="0 0 60 60" width="60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g>
-<rect fill="none" height="60" width="60"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1_" x1="31.3823" x2="31.3823" y1="49.3193" y2="6.7675">
-<stop offset="0" style="stop-color:#004E8C"/>
-<stop offset="1" style="stop-color:#1B66D8"/>
-</linearGradient>
-<circle cx="31.382" cy="28.137" fill="url(#SVGID_1_)" r="21.429"/>
-<radialGradient cx="23.8237" cy="17.7847" gradientTransform="matrix(0.9953 0 0 0.9952 7.3664 3.0238)" gradientUnits="userSpaceOnUse" id="SVGID_2_" r="25.9191">
-<stop offset="0" style="stop-color:#94FFFF"/>
-<stop offset="0.5" style="stop-color:#36B5FF"/>
-<stop offset="1" style="stop-color:#1B66D8"/>
-</radialGradient>
-<path d="M52.262,28.137c0,11.533-9.346,20.877-20.879,20.877c-11.533,0-20.882-9.344-20.882-20.877  c0-11.53,9.35-20.88,20.882-20.88C42.917,7.257,52.262,16.607,52.262,28.137z" fill="url(#SVGID_2_)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_3_" x1="31.3823" x2="31.3823" y1="7.0732" y2="49.1199">
-<stop offset="0" style="stop-color:#31A7F8"/>
-<stop offset="0.497" style="stop-color:#1E74DC"/>
-<stop offset="1" style="stop-color:#88D6EB"/>
-</linearGradient>
-<path d="M31.383,7.257c-11.533,0-20.882,9.35-20.882,20.88c0,11.533,9.35,20.877,20.882,20.877  c11.533,0,20.879-9.344,20.879-20.877C52.262,16.607,42.917,7.257,31.383,7.257z M31.383,47.188  c-10.843,0-19.664-8.818-19.664-19.659c0-10.843,8.82-19.663,19.664-19.663c10.841,0,19.66,8.82,19.66,19.663  C51.043,38.369,42.224,47.188,31.383,47.188z" fill="url(#SVGID_3_)" fill-opacity="0.3" stroke-opacity="0.3"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_4_" x1="10.8428" x2="14.1621" y1="30.9775" y2="30.9775">
-<stop offset="0" style="stop-color:#58595B"/>
-<stop offset="1" style="stop-color:#000000"/>
-</linearGradient>
-<path d="M12.462,27.796C12.239,27.5,11.737,27.5,11.516,27.5c-0.437,0-0.669,0.312-0.673,0.616  v0.021l0.001,0.031c-0.001,0.537,0.029,1.14,0.094,1.872c0.013,0.138,0.03,0.276,0.047,0.414l0.024,0.201  c0.056,0.434,0.121,0.86,0.195,1.274l0.034,0.182c0.032,0.164,0.063,0.324,0.098,0.484c0.089,0.406,0.198,0.826,0.332,1.291  c0.02,0.066,0.037,0.133,0.055,0.199c0.028,0.109,0.058,0.217,0.091,0.322l0.005,0.014l0.012,0.033  c-0.003-0.01-0.008-0.023-0.01-0.037l1.198-0.08c0.019-0.188,0.024-0.383,0.019-0.576c-0.01-0.303-0.021-0.676-0.107-0.99  l1.112-1.494l0.12-0.162v-0.203v-1.165v-0.252l-0.179-0.178L12.462,27.796z" fill="url(#SVGID_4_)" fill-opacity="0.3" stroke-opacity="0.3"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_5_" x1="17.2432" x2="51.9731" y1="24.897" y2="24.897">
-<stop offset="0" style="stop-color:#58595B"/>
-<stop offset="1" style="stop-color:#000000"/>
-</linearGradient>
-<path d="M51.966,24.045c-0.016-0.079-0.029-0.136-0.043-0.191  c-0.011-0.042-0.021-0.084-0.029-0.125c-0.106-0.495-0.237-1.005-0.392-1.525l-0.017-0.058c-0.033-0.117-0.068-0.234-0.105-0.349  c-0.188-0.588-0.393-1.148-0.608-1.666c-0.027-0.066-0.056-0.125-0.084-0.188l-0.045-0.1c-0.206-0.474-0.436-0.947-0.677-1.403  l-0.03-0.059c-0.047-0.09-0.093-0.181-0.142-0.269c-0.295-0.532-0.604-1.041-0.918-1.512c-0.032-0.049-0.069-0.102-0.106-0.154  c-0.023-0.031-0.045-0.061-0.066-0.092c-0.302-0.437-0.618-0.862-0.946-1.268l-0.064-0.082c-0.044-0.055-0.088-0.111-0.134-0.167  c-0.381-0.456-0.783-0.898-1.199-1.317c-0.056-0.056-0.115-0.115-0.176-0.172l-0.049-0.047c-0.375-0.368-0.774-0.732-1.183-1.074  l-0.081-0.069c-0.041-0.037-0.083-0.073-0.125-0.106c-0.446-0.367-0.931-0.728-1.435-1.075c-0.063-0.042-0.126-0.083-0.19-0.124  l-0.077-0.05c-0.454-0.301-0.928-0.59-1.404-0.853l-0.072-0.042c-0.04-0.023-0.079-0.045-0.119-0.068  c-0.529-0.283-1.081-0.55-1.643-0.792l-0.142-0.057l-0.153-0.063c-0.148-0.061-0.297-0.114-0.443-0.165  c-0.077-0.026-0.152-0.053-0.228-0.08l-0.282-0.105L38.303,8.74c-0.17,0.107-0.84,0.49-1.235,0.715  c-0.438-0.059-1.499-0.192-2.57-0.295c0.33-0.032,0.787-0.069,1.43-0.111l0.09-1.204L35.97,7.832  c-0.039-0.011-0.077-0.021-0.116-0.029l-0.092-0.018l-0.075-0.015c-0.655-0.131-1.271-0.227-1.882-0.291l-0.004-0.001l-0.085-0.009  c-0.698-0.07-1.409-0.106-2.112-0.106c-0.62,0-1.262,0.033-1.964,0.101c-0.109,0.01-0.214,0.021-0.321,0.032  c-0.693,0.078-1.3,0.17-1.873,0.286l-0.02,0.003l-0.015,0.002c-0.604,0.125-1.211,0.281-1.856,0.477  c-0.058,0.018-0.116,0.037-0.173,0.055l-0.131,0.043c-0.547,0.176-1.082,0.371-1.596,0.582c-0.042,0.018-0.071,0.029-0.1,0.04  l-0.078,0.031c-0.564,0.24-1.128,0.512-1.688,0.812c-0.06,0.031-0.118,0.066-0.177,0.099L21.542,9.97  c-0.157,0.087-0.315,0.185-0.473,0.283l-0.203,0.127l-1.118,0.684l1.242,0.415c0.186,0.063,0.385,0.093,0.592,0.093  c0.67,0,1.317-0.329,1.838-0.593c0.209-0.105,0.521-0.264,0.648-0.288c0.152,0.045,0.306,0.068,0.458,0.068  c0.569,0,1.035-0.306,1.446-0.578l0.111-0.072c0.134-0.043,0.362-0.128,0.818-0.299c0.465-0.174,1.314-0.493,1.54-0.546  c0.44-0.005,0.966-0.068,1.339-0.3c0.352,0.058,0.977,0.157,1.619,0.24c-0.047,0.029-0.093,0.059-0.132,0.097  c-0.209,0.192-1.335,0.533-1.68,0.578c-0.647,0.081-0.908,0.408-1.012,0.666c-0.135,0.336-0.054,0.672,0.078,0.946  c-0.245,0.162-0.545,0.342-0.804,0.479c0.001-0.006,0.003-0.012,0.004-0.02c0.093-0.517,0.16-0.89-0.091-1.189  c-0.128-0.153-0.317-0.241-0.519-0.241c-0.295,0-0.525,0.183-0.711,0.362c-0.52,0.502-0.834,1.129-0.952,1.365l-0.022,0.044  l-0.019,0.035c-0.225,0.431-0.317,0.737-0.192,1.688c-0.055,0.04-0.219,0.102-0.445,0.102c-0.03,0-0.058-0.002-0.079-0.003  c-0.146-0.158-0.349-0.248-0.576-0.248l0,0c-0.524,0-1.238,0.589-2.123,1.754l-0.284,0.374l0.289,0.371l0.27,0.343  c-4.216,3.259-4.248,3.444-4.292,3.717c-0.007,0.024-0.044,0.137-0.095,0.293c-0.628,1.952-0.977,3.413-0.637,4.194  c0.784,1.813,1.669,3.505,2.815,3.599c0.101,0.008,0.212,0.012,0.332,0.012c1.051,0,2.753-0.318,3.572-0.485  c0.151,0.283,0.335,0.614,0.438,0.795l0.181,0.323l0.37-0.012c0.004,0,0.199-0.006,0.448-0.006c0.286,0,0.478,0.008,0.602,0.017  c0.446,1.307,1.3,4.317,1.142,4.944L27.272,34.1c-1.441,2.16,0.306,4.975,1.145,6.328c0.066,0.107,0.126,0.203,0.177,0.287  c0.324,0.922,0.716,1.531,1.545,1.531c0.062,0,0.124-0.004,0.188-0.008c0.047-0.002,0.096-0.004,0.146-0.004  c0.092,0,0.157,0.01,0.226,0.035l0.075,0.027l0.08,0.006c0.155,0.014,0.306,0.035,0.453,0.057c0.255,0.035,0.519,0.07,0.788,0.07  c0.721,0,1.293-0.271,1.787-0.855c0.019-0.002,0.036-0.004,0.055-0.006c0.518-0.072,0.712-0.332,0.778-0.564  c0.038-0.039,0.089-0.086,0.131-0.125c0.204-0.188,0.447-0.41,0.615-0.674c0.075-0.045,0.161-0.096,0.258-0.152  c0.167-0.104,0.355-0.217,0.504-0.293c0.131-0.041,0.247-0.117,0.334-0.225c0.209-0.258,0.166-0.549,0.131-0.783  c-0.035-0.242-0.071-0.492,0.06-0.758c0.738-0.355,2.051-1.23,2.263-1.375l-0.001,0.018c-0.014,0.117-0.048,0.43-0.1,0.629  c-0.279,0.279-0.513,0.703-0.586,0.846l-0.049,0.094l-0.015,0.104c-0.019,0.137-0.094,0.85,0.306,1.311  c0.202,0.23,0.49,0.359,0.813,0.359c0.103,0,0.21-0.014,0.319-0.039c1.027-0.232,2.85-2.703,2.998-4.066  c0.072-0.656-0.185-1.172-0.704-1.416l-0.387-0.184l-0.304,0.303l-1.125,1.125c-0.38,0.035-0.678,0.148-0.879,0.326  c0.012-0.48-0.035-0.973-0.086-1.451c-0.155-1.447-0.185-2.369,0.703-2.996l0.045-0.033l0.038-0.039  c0.321-0.326,0.676-0.611,1.052-0.914c0.88-0.707,1.79-1.438,2.332-2.759l0.022-0.056c0.174-0.451,0.437-1.132,0.081-1.651  c-0.089-0.128-0.275-0.327-0.624-0.397c0.462-0.186,0.816-0.332,0.851-0.346l0.107-0.044l0.083-0.08l1.898-1.822l0.278-0.268  l-0.122-0.366c-0.017-0.047-0.12-0.335-0.411-0.747c0.554,0.075,1.029,0.208,1.185,0.326c0.057,0.124,0.171,0.396,0.292,0.683  c2.089,4.924,2.382,5.178,2.926,5.187c0.021,0,0.037,0.002,0.051,0.003c0.044,0.003,0.083,0.005,0.119,0.005  c0.31,0,0.486-0.157,0.564-0.252c0.227-0.274,0.163-0.608,0.14-0.734l-0.009-0.043c-0.025-0.294-0.008-1.618,0.034-2.706  c0.003,0.002,0.004,0.006,0.006,0.01l1.12-0.445L51.966,24.045z M35.508,18.021c-0.087,0.003-0.181,0.008-0.282,0.012  c-0.322,0.015-0.688,0.031-1.053,0.031c-0.955,0-1.174-0.118-1.196-0.131c-0.113-0.082-0.229-0.144-0.35-0.188  c0.216-0.048,0.464-0.214,0.719-0.708c0.251,0.487,0.592,0.917,1.115,0.917c0.142,0,0.277-0.034,0.406-0.101  C35.043,17.856,35.333,17.957,35.508,18.021z M35.133,15.357c-0.072,0-0.131-0.003-0.176-0.007c0.049-0.128,0.107-0.202,0.154-0.244  c0.06,0.093,0.14,0.175,0.232,0.245C35.27,15.355,35.2,15.357,35.133,15.357z M31.331,16.635c0.327,0.641,0.569,0.917,0.762,1.037  c-0.475,0.038-0.833,0.339-1.126,0.625c-0.206-0.068-0.565-0.286-0.672-0.438c-0.063-0.089-0.138-0.166-0.221-0.232  C30.593,17.479,31.049,16.998,31.331,16.635z M29.523,16.163l-0.679-0.033l-2.278-0.111c0.278-0.229,0.541-0.444,0.697-0.57  c0.042-0.015,0.205-0.06,0.605-0.06c0.242,0,0.474,0.017,0.62,0.029L29.523,16.163z" fill="url(#SVGID_5_)" fill-opacity="0.3" stroke-opacity="0.3"/>
-<radialGradient cx="24.4912" cy="10.4414" gradientTransform="matrix(0.9953 0 0 0.9952 7.3664 3.0238)" gradientUnits="userSpaceOnUse" id="SVGID_6_" r="23.6744">
-<stop offset="0" style="stop-color:#7AF200"/>
-<stop offset="0.3152" style="stop-color:#7AF200"/>
-<stop offset="0.7273" style="stop-color:#1CAD0F"/>
-<stop offset="1" style="stop-color:#007A3A"/>
-</radialGradient>
-<path d="M11.451,28.125C11.451,28.125,11.451,28.125,11.451,28.125c0,0.008,0.001,0.012,0.001,0.018  c0,0.622,0.039,1.236,0.093,1.844c0.018,0.198,0.047,0.398,0.069,0.598c0.053,0.417,0.116,0.83,0.19,1.238  c0.042,0.215,0.081,0.434,0.127,0.646c0.094,0.422,0.203,0.838,0.321,1.248c0.05,0.17,0.089,0.342,0.141,0.508  c0.007,0.018,0.015,0.033,0.019,0.051c0.017-0.16,0.021-0.326,0.017-0.496c-0.04-1.199-0.232-1.045-0.232-1.045l1.356-1.822v-1.165  l-1.589-1.589C11.964,28.159,11.452,28.079,11.451,28.125z" fill="url(#SVGID_6_)"/>
-<radialGradient cx="24.4868" cy="10.4395" gradientTransform="matrix(0.9953 0 0 0.9952 7.3664 3.0238)" gradientUnits="userSpaceOnUse" id="SVGID_7_" r="23.6775">
-<stop offset="0" style="stop-color:#7AF200"/>
-<stop offset="0.3152" style="stop-color:#7AF200"/>
-<stop offset="0.7273" style="stop-color:#1CAD0F"/>
-<stop offset="1" style="stop-color:#007A3A"/>
-</radialGradient>
-<path d="M24.212,10.099c0.587,0.193,1.066-0.2,1.613-0.549c0.193-0.04,2.338-0.896,2.57-0.896  c0.231,0,1.011-0.03,1.204-0.34c0,0,3.357,0.584,3.863,0.389c0.275-0.107,1.433-0.2,2.425-0.264  c-0.056-0.012-0.106-0.029-0.162-0.041c-0.054-0.011-0.105-0.019-0.161-0.03c-0.623-0.126-1.252-0.226-1.894-0.29  c-0.006,0-0.01,0-0.016-0.002c-0.674-0.068-1.358-0.104-2.052-0.104c-0.644,0-1.277,0.038-1.906,0.098  c-0.11,0.011-0.221,0.022-0.331,0.035c-0.608,0.067-1.211,0.155-1.801,0.274c-0.01,0.003-0.021,0.004-0.031,0.006  c-0.612,0.127-1.213,0.283-1.802,0.464c-0.102,0.03-0.199,0.064-0.302,0.096c-0.522,0.168-1.038,0.356-1.544,0.564  c-0.06,0.026-0.12,0.048-0.18,0.072c-0.557,0.238-1.1,0.501-1.63,0.784c-0.08,0.043-0.156,0.089-0.234,0.134  c-0.227,0.125-0.44,0.267-0.66,0.402C22.273,11.265,23.635,9.904,24.212,10.099z" fill="url(#SVGID_7_)"/>
-<radialGradient cx="24.4863" cy="10.437" gradientTransform="matrix(0.9953 0 0 0.9952 7.3664 3.0238)" gradientUnits="userSpaceOnUse" id="SVGID_8_" r="23.6745">
-<stop offset="0" style="stop-color:#B2F56E"/>
-<stop offset="0.3152" style="stop-color:#B2F56E"/>
-<stop offset="0.7273" style="stop-color:#5CBF1B"/>
-<stop offset="1" style="stop-color:#227A00"/>
-</radialGradient>
-<path d="M51.366,24.146c-0.021-0.102-0.049-0.197-0.069-0.297c-0.106-0.499-0.233-0.99-0.378-1.474  c-0.038-0.13-0.076-0.264-0.118-0.395c-0.176-0.549-0.371-1.09-0.59-1.616c-0.04-0.093-0.085-0.184-0.125-0.275  c-0.202-0.464-0.421-0.918-0.657-1.363c-0.056-0.106-0.109-0.215-0.166-0.319c-0.279-0.502-0.575-0.993-0.893-1.469  c-0.054-0.083-0.114-0.161-0.17-0.243c-0.291-0.422-0.596-0.831-0.916-1.228c-0.064-0.079-0.127-0.16-0.194-0.24  c-0.368-0.442-0.756-0.868-1.161-1.277c-0.069-0.07-0.143-0.14-0.215-0.208c-0.369-0.363-0.755-0.714-1.153-1.047  c-0.067-0.056-0.131-0.116-0.198-0.171c-0.448-0.366-0.915-0.714-1.395-1.043c-0.084-0.057-0.17-0.112-0.256-0.167  c-0.442-0.294-0.898-0.571-1.366-0.83c-0.063-0.035-0.123-0.073-0.187-0.108c-0.52-0.278-1.05-0.533-1.594-0.768  c-0.097-0.041-0.194-0.079-0.29-0.12c-0.211-0.087-0.432-0.156-0.646-0.235c-0.255,0.163-1.438,0.832-1.438,0.832  s-5.141-0.702-5.491-0.353c-0.352,0.353-1.721,0.71-2.033,0.751c-0.311,0.04-0.956,0.206-0.182,1.161  c-0.116,0.118-2.325,1.657-2.325,0.957s0.494-1.953-0.2-1.282c-0.498,0.482-0.796,1.135-0.86,1.257  c-0.163,0.312-0.263,0.461-0.145,1.357s-1.43,0.891-1.534,0.659c-0.276-0.622-1.809,1.394-1.809,1.394l0.646,0.828  c0,0-4.51,3.474-4.548,3.707c-0.04,0.234-1.164,3.25-0.775,4.147c0.39,0.897,1.376,3.158,2.307,3.233  c1.222,0.101,4.186-0.559,4.186-0.559c0.08,0.196,0.638,1.189,0.638,1.189s1.453-0.048,1.534,0.11  c0.026,0.053,1.75,5.122,1.182,5.794c-1.357,2.033,0.775,5.012,1.369,6.02c0.594,1.73,0.977,0.955,1.758,1.238  c0.962,0.084,1.772,0.439,2.589-0.611c0.237-0.195,0.641-0.041,0.641-0.313c0-0.152,0.698-0.598,0.878-1.018  c0.188-0.088,0.674-0.414,1.003-0.572c0.299-0.02-0.283-0.82,0.309-1.666c0.64-0.252,2.364-1.414,2.364-1.414  c0.078-1.705-0.839-3.811,0.873-5.02c1.104-1.126,2.553-1.767,3.255-3.479c0.194-0.506,0.628-1.542-0.619-1.231  c-1.173,0.295-2.48,0.362-1.861-0.154c-0.071-0.634-0.85-0.932-1.55-1.552c-0.361-0.854-0.93-2.378-0.93-2.378l-1.24-1.885  l0.155-0.389l1.474,2.171l1.474,1.781c0.542,1.783,1.007,1.939,1.007,1.939c0.815-0.288,2.753-1.086,2.753-1.086l1.898-1.822  c0,0-0.195-0.581-0.967-1.316l-0.584-0.349c-0.126,0.357-0.802,0.491-0.802,0.491l-1.641-1.964l0.61-0.123l0.471,0.896l1.128,0.39  c0,0,0.313-0.229,0.893,0.371c0.473-0.039,2.318,0.09,2.749,0.636c0.085,0.109,2.287,5.607,2.721,5.614  c0.19,0.002,0.329,0.077,0.267-0.256c-0.078-0.156,0-3.609,0.116-4.349c0.295-0.628,0.343-0.003,1.04,1.188  C51.374,24.204,51.372,24.175,51.366,24.146z M31.993,10.823c0.154-0.459,1.047-0.615,1.047-0.615s-0.256,0.473-0.197,0.716  c0.06,0.247-0.407,0.402-0.46,0.982c-0.051,0.578-1.117,0.239-1.204,0.036C31.09,11.74,31.835,11.281,31.993,10.823z M35.816,18.624  c-0.661,0-2.645,0.196-3.19-0.194c-0.546-0.389-0.97,0.04-1.362,0.43c-0.258,0.253-1.193-0.26-1.468-0.649  c-0.271-0.39-1.188-0.361-1.188-0.361l0.208-1.111l-2.637-0.128l-1.499,0.439l-1.41,0.041l0.79-0.376l0.983-0.232  c0,0,1.431-1.176,1.859-1.526c0.363-0.297,1.811-0.129,1.811-0.129l1.589,1.146c0,0-0.353,0.898-0.508,1.091  c0.583-0.039,1.269-1.099,1.269-1.099c-1.239-1.138-1.188-1.524-1.188-1.524l1.633,1.146l0.016,0.01c0,0,0.661,1.558,0.937,1.558  c0.271,0,0.619-1.073,0.619-1.073l0.465-0.117c0.207,0.492,0.595,1.603,1.059,1.343c0.269-0.147,0.71-0.013,1.215,0.181  c0.509,0.195,0.854-0.104,1.267,0.258C37.03,19.349,36.089,18.702,35.816,18.624z M36.853,15.943  c-0.681-0.259-2.984,0.586-2.47-0.796c0.275-0.746,0.981-0.901,1.223-0.405c0.063,0.204,0.83,0.519,0.824,0.09  c-0.006-0.431,0.771-0.659,0.883-0.338C36.899,14.791,38.932,16.341,36.853,15.943z M41.192,17.252  c-0.377-0.304,0.169-0.564-0.387-1.041c-0.798-0.684-1.421-0.978-0.334-1.532c1.341-0.168,0.218,0.428,0.44,0.786  c0.119,0.19,0.796,0.828,1.325,1.61C42.676,17.725,41.567,17.555,41.192,17.252z" fill="url(#SVGID_8_)"/>
-<radialGradient cx="24.4839" cy="10.4453" gradientTransform="matrix(0.9953 0 0 0.9952 7.3664 3.0238)" gradientUnits="userSpaceOnUse" id="SVGID_9_" r="23.6688">
-<stop offset="0" style="stop-color:#7AF200"/>
-<stop offset="0.3152" style="stop-color:#7AF200"/>
-<stop offset="0.7273" style="stop-color:#1CAD0F"/>
-<stop offset="1" style="stop-color:#007A3A"/>
-</radialGradient>
-<path d="M41.733,35.008l-1.293,1.291c0,0-0.778,0-0.815,0.313c-0.017,0.133-0.063,0.709-0.192,1.006  c-0.258,0.18-0.569,0.775-0.569,0.775s-0.158,1.15,0.699,0.953C40.42,39.152,43.059,35.633,41.733,35.008z" fill="url(#SVGID_9_)"/>
-<path d="M31.68,48.668c1.546,0,3.049-0.174,4.499-0.49c-0.039-0.049-0.071-0.1-0.114-0.145  l-7.534-7.756c-0.434-0.447-1.031-0.705-1.638-0.705c-0.57,0-1.102,0.221-1.5,0.625l-1.144,1.18l-0.472,0.477l-0.436,0.447  c-1.654-1.605-3.133-3.443-4.739-5.873c-0.888-1.348-1.653-2.988-2.138-4.123l-0.178-0.424c-0.001,0-0.242-0.598-0.324-0.811  l-0.027-0.068c-0.067-0.176-0.127-0.341-0.184-0.5l-0.025-0.069l1.843-0.641c1.017-0.344,1.593-1.403,1.363-2.555l-0.007-0.036  l-1.154-3.523l-2.274-6.787c-0.162-0.486-0.47-0.886-0.858-1.16c-2.416,3.407-3.841,7.565-3.841,12.059  C10.797,39.322,20.147,48.668,31.68,48.668z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<path d="M31.68,48.668c1.301,0,2.57-0.125,3.806-0.352l-7.394-7.613c-0.32-0.33-0.758-0.52-1.199-0.52  c-0.404,0-0.779,0.156-1.061,0.441l-1.148,1.182l-0.467,0.473l-0.424,0.436l0.003,0.004l-0.435,0.445  c-1.866-1.736-3.509-3.734-5.269-6.4c-0.91-1.381-1.694-3.059-2.192-4.221l-0.158-0.375l-0.024-0.059c0,0-0.243-0.602-0.327-0.816  l-0.029-0.072c-0.068-0.18-0.129-0.347-0.19-0.513c0,0-0.12-0.337-0.145-0.41l0.071-0.295l2.272-0.791  c0.721-0.244,1.127-1.009,0.966-1.819l-0.007-0.036l-1.142-3.485l-2.274-6.789c-0.119-0.357-0.343-0.65-0.626-0.851  c-2.204,3.31-3.492,7.283-3.492,11.557C10.797,39.322,20.147,48.668,31.68,48.668z" fill="#020202" fill-opacity="0.2" stroke-opacity="0.2"/>
-<radialGradient cx="-859.7427" cy="-265.1074" gradientTransform="matrix(0.9999 -0.0111 0.0111 0.9999 905.1068 277.0371)" gradientUnits="userSpaceOnUse" id="SVGID_10_" r="34.2211">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.8364" style="stop-color:#FFBE82"/>
-<stop offset="0.8909" style="stop-color:#FFBE82"/>
-<stop offset="0.9515" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</radialGradient>
-<path d="M23.387,44.016c-2.39-2.133-4.191-4.469-5.806-6.914c-1.552-2.357-2.958-5.889-3.393-7.428  l-6.272-8.836c-0.357,0.592-0.921,2.715-0.661,5.588c0.262,2.872,2.939,9.828,6.083,14.596c3.146,4.766,7.81,9.248,9.374,10.24  c2.462,1.561,5.427,2.074,6.329,2.029c0,0,0.833-0.098,1.97-0.496C31.5,52.625,23.387,44.016,23.387,44.016z" fill="url(#SVGID_10_)"/>
-<path d="M15.369,32.857c-0.55-1.283-0.976-2.456-1.18-3.184l-6.104-8.599c-0.064,0.09-0.099,0.144-0.099,0.144  c-0.104,0.172-0.22,0.458-0.338,0.813c-0.118,0.599-0.177,1.219-0.167,1.854C7.541,28.374,10.936,32.078,15.369,32.857z" fill-opacity="0.05" stroke-opacity="0.05"/>
-<path d="M15.108,32.234c-0.423-1.033-0.749-1.953-0.919-2.561l-6.125-8.627c-0.069,0.101-0.109,0.161-0.109,0.161  c-0.097,0.162-0.208,0.434-0.318,0.769c-0.111,0.567-0.168,1.151-0.159,1.751C7.536,28.033,10.834,31.572,15.108,32.234z" fill-opacity="0.05" stroke-opacity="0.05"/>
-<path d="M7.907,21.188c-0.088,0.148-0.188,0.394-0.289,0.698c-0.102,0.514-0.152,1.046-0.144,1.59  c0.054,4.01,3.21,7.283,7.24,7.757c-0.232-0.618-0.412-1.157-0.526-1.559l-6.154-8.67C7.951,21.121,7.907,21.188,7.907,21.188z" fill-opacity="0.1" stroke-opacity="0.1"/>
-<radialGradient cx="-891.105" cy="-262.4795" gradientTransform="matrix(1.0009 -0.0086 0.0135 0.9911 906.6143 271.6763)" gradientUnits="userSpaceOnUse" id="SVGID_11_" r="11.8382">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.0424" style="stop-color:#FFBE82"/>
-<stop offset="0.4" style="stop-color:#FFBE82"/>
-<stop offset="0.7333" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</radialGradient>
-<path d="M14.188,29.674l1.312-0.461c0,0-2.781-12.441-3.885-11.868c-0.555,0.29-0.549,0.448-1.11,0.853  c-1.676,1.219-2.589,2.641-2.589,2.641c-0.077,0.13-0.165,0.345-0.252,0.613c-0.088,0.45-0.134,0.916-0.128,1.392  c0.05,3.62,2.979,6.563,6.661,6.841C14.194,29.681,14.189,29.677,14.188,29.674z" fill="url(#SVGID_11_)"/>
-<path d="M23.289,45.25c-0.259,0.727-0.4,1.498-0.39,2.303c0.025,1.906,0.882,3.621,2.242,4.898  c1.716,0.641,3.287,0.871,3.9,0.84c0,0,0.833-0.098,1.97-0.496c0.409-0.143-5.222-6.213-7.055-8.172L23.289,45.25z" fill-opacity="0.05" stroke-opacity="0.05"/>
-<path d="M23.448,44.59c-0.261,0.725-0.401,1.496-0.391,2.301c0.036,2.613,1.621,4.875,3.95,6.125  c0.771,0.18,1.418,0.264,1.829,0.275c0.011,0,0.026,0.002,0.037,0c0,0,0.832-0.096,1.972-0.494c0.422-0.148-5.624-6.641-7.233-8.363  L23.448,44.59z" fill-opacity="0.1" stroke-opacity="0.1"/>
-<radialGradient cx="-877.4263" cy="-238.3691" gradientTransform="matrix(1.0009 -0.0086 0.0135 0.9911 906.6143 271.6763)" gradientUnits="userSpaceOnUse" id="SVGID_12_" r="12.0474">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.0424" style="stop-color:#FFBE82"/>
-<stop offset="0.4" style="stop-color:#FFBE82"/>
-<stop offset="0.7333" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</radialGradient>
-<path d="M32.6,52.1c0.653-0.35,0.819-0.34,1.351-0.74c0.98-0.74-8.83-9.123-8.83-9.123l-1.712,1.756  c-0.229,0.695-0.355,1.434-0.345,2.203c0.051,3.766,3.219,6.797,7.107,6.857C30.828,52.877,31.693,52.584,32.6,52.1z" fill="url(#SVGID_12_)"/>
-<path d="M14.866,29.428l0.634-0.215c0,0-2.781-12.441-3.885-11.868  c-0.291,0.151-0.427,0.268-0.573,0.401L14.866,29.428z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<linearGradient gradientTransform="matrix(0.9999 -0.0111 0.0111 0.9999 905.1068 277.0361)" gradientUnits="userSpaceOnUse" id="SVGID_13_" x1="-889.625" x2="-885.2537" y1="-270.9771" y2="-257.0911">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.0424" style="stop-color:#FFBE82"/>
-<stop offset="0.4" style="stop-color:#FFBE82"/>
-<stop offset="0.7333" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</linearGradient>
-<path d="M15.5,29.214l1.677-0.583c0.435-0.147,0.659-0.629,0.562-1.119l-1.129-3.446l-2.275-6.79  c-0.177-0.533-0.71-0.836-1.188-0.676c0,0-0.429,0.175-1.529,0.747L15.5,29.214z" fill="url(#SVGID_13_)"/>
-<path d="M25.121,42.236l-0.468,0.473l8.748,9.039c0.188-0.131,0.379-0.26,0.55-0.389  C34.931,50.619,25.121,42.236,25.121,42.236z" fill="#020202" fill-opacity="0.1" stroke-opacity="0.1"/>
-<linearGradient gradientTransform="matrix(0.9999 -0.0111 0.0111 0.9999 905.1068 277.0366)" gradientUnits="userSpaceOnUse" id="SVGID_14_" x1="-876.2178" x2="-867.1104" y1="-245.4277" y2="-235.398">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="0.0424" style="stop-color:#FFBE82"/>
-<stop offset="0.4" style="stop-color:#FFBE82"/>
-<stop offset="0.7333" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#FFBE82"/>
-</linearGradient>
-<path d="M33.95,51.357c0.978-0.738,1.295-1.059,1.295-1.059c0.364-0.373,0.338-1.002-0.059-1.412  l-7.534-7.756c-0.397-0.412-1.016-0.451-1.38-0.08l-1.151,1.186L33.95,51.357z" fill="url(#SVGID_14_)"/>
-</g>
-<g>
-<rect fill="none" height="30" width="30"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_1__" x1="15.0005" x2="15.0005" y1="4.5283" y2="27.0492">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<path d="M19.018,16.846v-4.316h4.535l-8.512-8.844l-8.592,8.844h4.631v4.316  c0,7.293,6.068,9.467,11.908,9.467v-6.422C21.189,19.891,19.018,19.002,19.018,16.846z" fill="url(#SVGID_1__)"/>
-<linearGradient gradientUnits="userSpaceOnUse" id="SVGID_2__" x1="15.0005" x2="15.0005" y1="4.0146" y2="12.8168">
-<stop offset="0" style="stop-color:#FFBE82"/>
-<stop offset="1" style="stop-color:#991B23"/>
-</linearGradient>
-<polygon fill="url(#SVGID_2__)" points="15.041,4.508 22.762,12.529 23.553,12.529 15.041,3.686 6.449,12.529 7.248,12.529 "/>
-</g>
-</svg>
--- a/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsevent.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logsevent.h	Fri Jun 11 13:38:41 2010 +0300
@@ -54,6 +54,7 @@
     void testSetContactLocalId();
     void testUpdateRemotePartyFromContacts();
     void testParseContactName();
+    void testSerialization();
  
 private:
  
--- a/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logseventdata.h	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/tsrc/ut_logsengine/inc/ut_logseventdata.h	Fri Jun 11 13:38:41 2010 +0300
@@ -49,6 +49,7 @@
     void testSetters();
     void testGetters();
     void testIsCsCompatible();
+    void testSerialization();
     
 private:
  
--- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsevent.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsevent.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -184,3 +184,103 @@
     QVERIFY(event.parseContactName(name) == "");
 }
 
+void UT_LogsEvent::testSerialization()
+{
+    // Serialize/deserialize, no event data
+    LogsEvent event;
+    event.mLogId = 3;        
+    event.mDirection = LogsEvent::DirMissed;
+    event.mEventType = LogsEvent::TypeVideoCall;
+    event.mUid = 222222;
+    event.mLogsEventData = 0;
+    event.mRemoteParty = "remotePart";
+    event.mNumber = "33333";
+    event.mDuplicates = 2;                 
+    event.mRingDuration = 3;
+    event.mIsRead = true;  
+    event.mIsALS = false;
+    event.mDuration = 30;
+    event.mIndex = 3;
+    event.mIsInView = true;
+    event.mEventState = LogsEvent::EventAdded;
+    event.mIsLocallySeen = true;
+    event.mIsPrivate = false;
+    event.mIsUnknown = false;
+    
+    QByteArray serializedEvent;
+    QDataStream stream(&serializedEvent, QIODevice::WriteOnly | QIODevice::Append);
+    event.serialize(stream);
+    
+    QDataStream readStream(&serializedEvent, QIODevice::ReadOnly);
+    
+    LogsEvent deserializedEvent(readStream);
+    QVERIFY( deserializedEvent.mLogId == 3 );        
+    QVERIFY( deserializedEvent.mDirection == LogsEvent::DirMissed );
+    QVERIFY( deserializedEvent.mEventType == LogsEvent::TypeVideoCall );
+    QVERIFY( deserializedEvent.mUid == 222222 );
+    QVERIFY( deserializedEvent.mLogsEventData == 0 );
+    QVERIFY( deserializedEvent.mRemoteParty == "remotePart" );
+    QVERIFY( deserializedEvent.mNumber == "33333" );
+    QVERIFY( deserializedEvent.mDuplicates == 2 );                 
+    QVERIFY( deserializedEvent.mRingDuration == 3 );
+    QVERIFY( deserializedEvent.mIsRead == true );  
+    QVERIFY( deserializedEvent.mIsALS == false );
+    QVERIFY( deserializedEvent.mDuration == 30 );
+    QVERIFY( deserializedEvent.mIndex == 3 );
+    QVERIFY( deserializedEvent.mIsInView == true );
+    QVERIFY( deserializedEvent.mEventState == LogsEvent::EventAdded );
+    QVERIFY( deserializedEvent.mIsLocallySeen == true );
+    QVERIFY( deserializedEvent.mIsPrivate == false );
+    QVERIFY( deserializedEvent.mIsUnknown == false );
+    
+    // Serialize/deserialize, event data exists
+    event.mLogsEventData = new LogsEventData();
+    
+    QByteArray serializedEvent2;
+    QDataStream stream2(&serializedEvent2, QIODevice::WriteOnly | QIODevice::Append);
+    event.serialize(stream2);  
+    QDataStream readStream2(&serializedEvent2, QIODevice::ReadOnly);      
+    LogsEvent deserializedEvent2(readStream2);
+    QVERIFY( deserializedEvent2.mLogId == 3 );        
+    QVERIFY( deserializedEvent2.mDirection == LogsEvent::DirMissed );
+    QVERIFY( deserializedEvent2.mEventType == LogsEvent::TypeVideoCall );
+    QVERIFY( deserializedEvent2.mUid == 222222 );
+    QVERIFY( deserializedEvent2.mLogsEventData != 0 );
+    QVERIFY( deserializedEvent2.mRemoteParty == "remotePart" );
+    QVERIFY( deserializedEvent2.mNumber == "33333" );
+    QVERIFY( deserializedEvent2.mDuplicates == 2 );                 
+    QVERIFY( deserializedEvent2.mRingDuration == 3 );
+    QVERIFY( deserializedEvent2.mIsRead == true );  
+    QVERIFY( deserializedEvent2.mIsALS == false );
+    QVERIFY( deserializedEvent2.mDuration == 30 );
+    QVERIFY( deserializedEvent2.mIndex == 3 );
+    QVERIFY( deserializedEvent2.mIsInView == true );
+    QVERIFY( deserializedEvent2.mEventState == LogsEvent::EventAdded );
+    QVERIFY( deserializedEvent2.mIsLocallySeen == true );
+    QVERIFY( deserializedEvent2.mIsPrivate == false );
+    QVERIFY( deserializedEvent2.mIsUnknown == false );
+    
+    // Incorrect stream
+    QByteArray serializedEvent3;
+    QDataStream stream3(&serializedEvent3, QIODevice::ReadWrite | QIODevice::Append);
+    LogsEvent deserializedEvent3(stream3);
+    QVERIFY( deserializedEvent3.mLogId == 0 );        
+    QVERIFY( deserializedEvent3.mDirection == LogsEvent::DirIn );
+    QVERIFY( deserializedEvent3.mEventType == LogsEvent::TypeVoiceCall );
+    QVERIFY( deserializedEvent3.mUid == 0 );
+    QVERIFY( deserializedEvent3.mLogsEventData == 0 );
+    QVERIFY( deserializedEvent3.mRemoteParty == "" );
+    QVERIFY( deserializedEvent3.mNumber == "" );
+    QVERIFY( deserializedEvent3.mDuplicates == 0 );                 
+    QVERIFY( deserializedEvent3.mRingDuration == 0 );
+    QVERIFY( deserializedEvent3.mIsRead == false );  
+    QVERIFY( deserializedEvent3.mIsALS == false );
+    QVERIFY( deserializedEvent3.mDuration == 0 );
+    QVERIFY( deserializedEvent3.mIndex == 0 );
+    QVERIFY( deserializedEvent3.mIsInView == false );
+    QVERIFY( deserializedEvent3.mEventState == LogsEvent::EventAdded );
+    QVERIFY( deserializedEvent3.mIsLocallySeen == false );
+    QVERIFY( deserializedEvent3.mIsPrivate == false );
+    QVERIFY( deserializedEvent3.mIsUnknown == false );
+}
+
--- a/logsui/logsengine/tsrc/ut_logsengine/src/ut_logseventdata.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logseventdata.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -97,3 +97,8 @@
     mEventData->mRemoteUrl = "test@1.2.3.4";
     QVERIFY( !mEventData->isCsCompatible() );
 }
+
+void UT_LogsEventData::testSerialization()
+{
+    
+}
--- a/logsui/logsservices/src/logsservices.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/logsservices/src/logsservices.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -19,10 +19,11 @@
 #include <logsservices.h>
 #include "logslogger.h"
 
-// --------------------------------------------------------------------------
-// LogsServices::start
-// --------------------------------------------------------------------------
-//
+/*!
+    \deprecated LogsServices::start(LogsView activatedView, bool showDialpad, const QString& number)
+        is deprecated. Use XQApplicationManager and
+        "com.nokia.symbian.ILogsView" interface instead
+*/
 int LogsServices::start(LogsView activatedView, bool showDialpad, const QString& number)
 {
     LOGS_QDEBUG_2( "LogsServices::start ->", activatedView )
--- a/logsui/rom/logsresources.iby	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/rom/logsresources.iby	Fri Jun 11 13:38:41 2010 +0300
@@ -23,4 +23,5 @@
 data=DATAZ_\resource\apps\logs.rsc \resource\apps\logs.rsc
 data=DATAZ_\QT_TRANSLATIONS_DIR\dialer.qm QT_TRANSLATIONS_DIR\dialer.qm
 
+
 #endif
--- a/logsui/tsrc/logdbmodifier/addeventtest/install/clientlogstest.pkg	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/tsrc/logdbmodifier/addeventtest/install/clientlogstest.pkg	Fri Jun 11 13:38:41 2010 +0300
@@ -37,7 +37,7 @@
 ;
 ; Three files to install
 ;
-"\epoc32\release\armv5\udeb\logclienttest.exe"                   -"!:\sys\bin\logclienttest.exe"
+"\epoc32\release\armv5\urel\logclienttest.exe"       -"!:\sys\bin\logclienttest.exe"
 "\epoc32\winscw\c\system\testlogclients.dat"         -"!:\system\testlogclients.dat"
 
 
--- a/logsui/tsrc/logsservicestester/install/logsservicestester.pkg	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/tsrc/logsservicestester/install/logsservicestester.pkg	Fri Jun 11 13:38:41 2010 +0300
@@ -37,6 +37,6 @@
 ;
 ; Three files to install
 ;
-"\epoc32\release\armv5\udeb\logsservicestester.exe"    - "!:\sys\bin\logsservicestester.exe"
+"\epoc32\release\armv5\urel\logsservicestester.exe"    - "!:\sys\bin\logsservicestester.exe"
 "\epoc32\data\z\resource\apps\logsservicestester.rsc"    - "!:\resource\apps\logsservicestester.rsc"
 "\epoc32\data\z\private\10003a3f\import\apps\logsservicestester_reg.rsc"    - "!:\private\10003a3f\import\apps\logsservicestester_reg.rsc"
--- a/logsui/tsrc/logsservicestester/logsservicestester.pro	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/tsrc/logsservicestester/logsservicestester.pro	Fri Jun 11 13:38:41 2010 +0300
@@ -19,16 +19,22 @@
 TARGET = 
 DEPENDPATH += .
 INCLUDEPATH += .
+INCLUDEPATH += ..\..\logsapp\inc
 INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
 CONFIG += hb
 
 # Input
+HEADERS += logsservicetesterwidget.h
+HEADERS += logsservicetesterappcloser.h
+
 SOURCES += main.cpp
+SOURCES += logsservicetesterwidget.cpp
+SOURCES += logsservicetesterappcloser.cpp
 
 symbian: {
     TARGET.UID2 = 0x100039CE
     TARGET.UID3 = 0xEC209DCF
-    TARGET.CAPABILITY = CAP_APPLICATION AllFiles
-    LIBS += -llogsservices   
+    TARGET.CAPABILITY = CAP_APPLICATION PowerMgmt
+    LIBS += -llogsservices  -lxqservice 
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/tsrc/logsservicestester/logsservicetesterappcloser.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,183 @@
+/*
+* 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 <QDebug>
+#include "logsservicetesterappcloser.h"
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsServiceTesterAppCloser::LogsServiceTesterAppCloser(QObject* parent) : 
+    QObject(parent)
+{
+    mAppCloseWatch = new CAppCloseWatcher(*this);    
+    connect(&mTimer, SIGNAL(timeout()), this, SLOT(closeAppTimeout()));
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsServiceTesterAppCloser::~LogsServiceTesterAppCloser()
+{
+    delete mAppCloseWatch;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterAppCloser::AppClosed(TInt aError)
+{
+    mTimer.stop();
+    if (aError == KErrNone) {
+        emit closed();
+    } else {
+        emit closeError(aError);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterAppCloser::closeAppTimeout()
+{
+    mAppCloseWatch->Cancel();
+    emit closeError(ErrorClosingTimeout);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterAppCloser::closeApp(TApaTask& aTask)
+{
+    if ( !mAppCloseWatch->IsActive() ) {
+        mTimer.start(3000); //3 sec.
+        mTimer.setSingleShot(true);
+        mAppCloseWatch->Start(aTask);
+        aTask.EndTask();
+    } else {
+        emit closeError(ErrorClosingOngoing);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterAppCloser::closeDialerApp()
+{
+    qDebug() << "[LOGS_TESTER] -> LogsServiceTesterAppCloser::closeDialerApp()";
+    const TUid KUidDialer    = { 0x101F4CD5 };
+    RWsSession ws;
+    TInt err = ws.Connect();
+    if (err == KErrNone) {
+        TApaTaskList tl( ws);
+        TApaTask dialerTask = (TApaTask)tl.FindApp( KUidDialer );        
+        if (dialerTask.Exists()) {
+            qDebug() << "[LOGS_TESTER] dialer is running, killing";
+            closeApp(dialerTask);
+        } else {
+            qDebug() << "[LOGS_TESTER] dialer is not running";
+            emit closeError(ErrorAppNotRunning);
+        }
+        ws.Close();
+    } else {
+        emit closeError(err);
+    }
+    qDebug() << "[LOGS_TESTER] <- LogsServiceTesterAppCloser::closeDialerApp()";    
+}
+
+
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CAppCloseWatcher::CAppCloseWatcher(MCloseOberver& aObserver) :  
+    CActive(CActive::EPriorityStandard), iObserver(aObserver)
+    {
+    CActiveScheduler::Add(this);    
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CAppCloseWatcher::~CAppCloseWatcher()
+    {
+    Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAppCloseWatcher::Start(const TApaTask& aTask)
+    {
+    qDebug() << "[LOGS_TESTER] -> CAppCloseWatcher::Start()!";
+    if (!IsActive())
+        {
+        TInt err = iThread.Open(aTask.ThreadId());
+        if (err == KErrNone)
+            {
+            qDebug() << "[LOGS_TESTER] calling  iThread.Logon(iStatus)";    
+            iOriginalProcessPriority = iThread.ProcessPriority();
+            iThread.SetProcessPriority(EPriorityForeground);
+            iThread.Logon(iStatus);
+            SetActive();
+            }
+        else
+            {
+            qDebug() << "[LOGS_TESTER] calling  iThread.Open() failed: "<< err;
+            TRequestStatus* s = &iStatus;
+            User::RequestComplete(s, err);
+            SetActive();
+            }
+        } 
+    qDebug() << "[LOGS_TESTER] <- CAppCloseWatcher::Start()";    
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAppCloseWatcher::DoCancel()
+    {
+    qDebug() << "[LOGS_TESTER] -> CAppCloseWatcher::DoCancel()";
+    iThread.LogonCancel(iStatus);
+    iThread.SetProcessPriority(iOriginalProcessPriority);
+    iThread.Close();
+    qDebug() << "[LOGS_TESTER] -> CAppCloseWatcher::DoCancel()";
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAppCloseWatcher::RunL()
+    {
+    qDebug() << "[LOGS_TESTER] -> CAppCloseWatcher::RunL()";
+    if (iThread.Handle())
+        iThread.SetProcessPriority(iOriginalProcessPriority);
+    iThread.Close();
+    iObserver.AppClosed(iStatus.Int());
+    qDebug() << "[LOGS_TESTER] <- CAppCloseWatcher::RunL()";
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/tsrc/logsservicestester/logsservicetesterappcloser.h	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,110 @@
+/*
+* 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 LOGSSERVICETESTERAPPCLOSER_H
+#define LOGSSERVICETESTERAPPCLOSER_H
+
+#include <e32base.h>
+#include <apgtask.h>
+#include <QTimer>
+
+
+class CAppCloseWatcher;
+
+/**
+ * 
+ */
+class MCloseOberver
+{
+public:
+    virtual void AppClosed(TInt aError) = 0;
+};
+
+
+/**
+ * 
+ */
+class LogsServiceTesterAppCloser : public QObject, public MCloseOberver 
+{
+    Q_OBJECT
+public:
+    
+    explicit LogsServiceTesterAppCloser(QObject *parent=0);
+    ~LogsServiceTesterAppCloser();
+    
+    enum AppCloserErrors {
+        ErrorAppNotRunning = 1,
+        ErrorClosingOngoing,
+        ErrorClosingTimeout
+    };
+    
+public slots:
+
+    void closeApp(TApaTask& aTask);
+    void closeDialerApp();
+
+signals:
+        
+    void closed();
+    void closeError(int error);
+    
+private slots:
+    
+    void closeAppTimeout();
+    
+private:
+    
+    // from MCloseOberver
+    virtual void AppClosed(TInt aError);
+    
+private:
+    QTimer mTimer;
+    CAppCloseWatcher* mAppCloseWatch;
+};
+
+
+/**
+ * 
+ */
+class CAppCloseWatcher : public CActive
+    {
+public:
+    
+    CAppCloseWatcher(MCloseOberver& aObserver);
+    ~CAppCloseWatcher();
+    
+    // Start watching application death
+    void Start(const TApaTask& aTask);
+    
+private:
+    
+    void DoCancel();
+    void RunL();
+    
+private: //data
+
+    //A handle to the main thread of the application to be closed.
+    RThread iThread;
+    
+    //A backup of the orginal priority of the application's process
+    TProcessPriority iOriginalProcessPriority;
+    
+    MCloseOberver& iObserver;
+    };
+
+#endif // LOGSSERVICETESTERAPPCLOSER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/tsrc/logsservicestester/logsservicetesterwidget.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,187 @@
+/*
+* 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 <QGraphicsLinearLayout>
+#include <QScopedPointer>
+#include <QDebug>
+
+#include <hbmessagebox.h>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hblineedit.h>
+#include <hbcombobox.h>
+#include <hbcheckbox.h>
+#include <xqappmgr.h>
+#include <xqaiwrequest.h>
+#include <logsservices.h>
+
+#include "logsservicetesterwidget.h"
+#include "logsservicetesterappcloser.h"
+#include "logsdefs.h"
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsServiceTesterWidget::LogsServiceTesterWidget(QGraphicsItem *parent ) :
+    HbWidget(parent), 
+    mViewIndex(0), 
+    mShowDialpad(false), 
+    mDialpadText(QString())
+{
+    qDebug() << "[LOGS_TESTER]-> LogsServiceTesterWidget::LogsServiceTesterWidget()";
+    mAppCloser = new LogsServiceTesterAppCloser(this);
+    connect(mAppCloser, SIGNAL(closed()), this, SLOT(dialerClosed()), 
+            Qt::QueuedConnection);
+    connect(mAppCloser, SIGNAL(closeError(int)), this, SLOT(dialerCloseError(int)),
+            Qt::QueuedConnection);
+    
+    HbLabel* comboLabel = new HbLabel("Select logs view:");
+    
+    mComboBox = new HbComboBox();
+    mComboBox->addItem( "Recent view", QVariant(LogsServices::ViewAll));
+    mComboBox->addItem( "Received view", QVariant(LogsServices::ViewReceived));
+    mComboBox->addItem( "Called view", QVariant(LogsServices::ViewCalled));
+    mComboBox->addItem( "Missed view", QVariant(LogsServices::ViewMissed));
+
+    mCheckBox = new HbCheckBox("Show dialpad");
+    
+    HbLabel* editorLabel = new HbLabel("Launch dialpad with number:");
+    mEditor = new HbLineEdit();
+    mEditor->setInputMethodHints(Qt::ImhPreferNumbers);
+    
+    HbPushButton* newService = new HbPushButton("Start Dialer via new service name");
+    newService->setPreferredHeight(60);
+    connect(newService, SIGNAL(clicked()), this, SLOT(startNewService()));
+
+    HbPushButton* oldService = new HbPushButton("Start Dialer via old service name");
+    oldService->setPreferredHeight(60);
+    connect(oldService, SIGNAL(clicked()), this, SLOT(startOldService()));
+
+    HbPushButton* killDialer = new HbPushButton("Kill Dialer");
+    killDialer->setPreferredHeight(60);
+    connect(killDialer, SIGNAL(clicked()), mAppCloser, SLOT(closeDialerApp()));
+    
+    QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical);
+    layout->addItem(comboLabel);
+    layout->addItem(mComboBox);
+    layout->addItem(mCheckBox);
+    layout->addItem(editorLabel);
+    layout->addItem(mEditor);
+    layout->addItem(newService);
+    layout->addItem(oldService);
+    layout->addItem(killDialer);
+    setLayout(layout);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LogsServiceTesterWidget:: ~LogsServiceTesterWidget()
+{
+    qDebug() << "[LOGS_TESTER] <-> LogsServiceTesterWidget::~LogsServiceTesterWidget()";
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterWidget::fetchData()
+{
+    qDebug() << "[LOGS_TESTER] LogsServiceTesterWidget::fetchData()";
+    int index = mComboBox->currentIndex()>0 ? mComboBox->currentIndex() : 0;
+    mViewIndex = mComboBox->itemData(index).toInt();
+    qDebug() << "[LOGS_TESTER] viewIndex: " << mViewIndex;
+    
+    mShowDialpad = (mCheckBox->checkState() == Qt::Checked) ? true : false;
+    qDebug() << "[LOGS_TESTER] showDialpad: " << mShowDialpad;
+    
+    mDialpadText = mEditor->text();
+    qDebug() << "[LOGS_TESTER] dialpadText: " << mDialpadText;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterWidget::startNewService()
+{
+    qDebug() << "[LOGS_TESTER] -> LogsServiceTesterWidget::startNewService()";
+    fetchData();
+
+    XQApplicationManager appMgr;
+    QScopedPointer<XQAiwRequest> request(appMgr.create( QLatin1String(logsServiceName),
+                    QLatin1String(logsInterfaceName),
+                    QLatin1String(logsOperationName),
+                    false));
+    if (!request.isNull()) {
+        int retValue = -1; 
+        QList<QVariant> arglist;
+        QVariantMap map;
+        map.insert(logsViewIndexParam, QVariant(mViewIndex));
+        map.insert(logsShowDialpadParam, QVariant(mShowDialpad));
+        map.insert(logsDialpadTextParam, QVariant(mDialpadText));
+        
+        arglist.append(QVariant(map));
+        request->setArguments(arglist);
+        QVariant ret(retValue);
+        
+        request->send(ret);
+    }
+    qDebug() << "[LOGS_TESTER] <- LogsServiceTesterWidget::startNewService()";
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterWidget::startOldService()
+{
+    qDebug() << "[LOGS_TESTER] -> LogsServiceTesterWidget::startOldService()";
+    fetchData();
+    LogsServices::start( (LogsServices::LogsView)mViewIndex, mShowDialpad, mDialpadText );
+    qDebug() << "[LOGS_TESTER] <- LogsServiceTesterWidget::startOldService()";
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterWidget::dialerClosed()
+{
+    HbMessageBox::information("Dialer closed");
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void LogsServiceTesterWidget::dialerCloseError(int error)
+{
+    QString errorMsg;
+    if (error == LogsServiceTesterAppCloser::ErrorAppNotRunning) {
+        errorMsg = QString("Dialer not running");
+    } else if (error == LogsServiceTesterAppCloser::ErrorClosingOngoing) {
+        errorMsg = QString("Dialer closing is already ongoing");
+    } else  if (error == LogsServiceTesterAppCloser::ErrorClosingTimeout) {
+        errorMsg = QString("Dialer closing timeout");
+    } else {
+        errorMsg = QString("Dialer closing error: %1").arg(error);
+    } 
+    HbMessageBox::warning(errorMsg);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/tsrc/logsservicestester/logsservicetesterwidget.h	Fri Jun 11 13:38:41 2010 +0300
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef LOGSSERVICETESTERWIDGET_H
+#define LOGSSERVICETESTERWIDGET_H
+
+#include <hbwidget.h>
+
+class HbComboBox;
+class HbCheckBox;
+class HbLineEdit;
+class LogsServiceTesterAppCloser;
+
+class LogsServiceTesterWidget : public HbWidget
+{
+    Q_OBJECT
+
+public:
+    LogsServiceTesterWidget(QGraphicsItem *parent=0);
+    ~LogsServiceTesterWidget();   
+
+public slots:
+
+    void startOldService();
+    void startNewService();
+    
+    void dialerClosed();
+    void dialerCloseError(int error);
+    
+private:
+    
+    void fetchData();
+    
+private:
+    HbCheckBox* mCheckBox;
+    HbComboBox* mComboBox;
+    HbLineEdit* mEditor;
+    
+    int mViewIndex;
+    bool mShowDialpad;
+    QString mDialpadText;
+    
+    LogsServiceTesterAppCloser* mAppCloser;
+};
+
+
+#endif // LOGSSERVICETESTERWIDGET_H
+
--- a/logsui/tsrc/logsservicestester/main.cpp	Thu May 27 12:51:53 2010 +0300
+++ b/logsui/tsrc/logsservicestester/main.cpp	Fri Jun 11 13:38:41 2010 +0300
@@ -15,41 +15,19 @@
 *
 */
 
-#include <QString>
-#include <QStringList>
-#include <QDebug>
 #include <hbapplication.h>
 #include <hbmainwindow.h>
-#include <logsservices.h>
+#include "logsservicetesterwidget.h"
 
 int main(int argc, char *argv[])
 {
-    qDebug() << "LogsServicesTester entry";
-    LogsServices::LogsView viewIndex = LogsServices::ViewAll;
-    bool showDialpad = false;
-    QString number;
-    for ( int i = 0; i< argc; i++ ){
-        qDebug() << "Arg" << ( i + 1 ) << argv[i];
-        QString argStr( argv[i] );
-        if ( argStr.length() == 1 ){
-            viewIndex = (LogsServices::LogsView)argStr.toInt();
-        }
-        if ( argStr == QString("-dialpad") ){
-            showDialpad = true;
-        }
-        if ( argStr == QString("-num") ){
-            number = "223456677";
-        }
-    }
-    
-    HbApplication app(argc, argv);
-    HbMainWindow mainWindow;
-    mainWindow.show();
-    
-    qDebug() << "LogsServicesTester start logs";    
-    LogsServices::start( viewIndex, showDialpad, number );
-    
-    int ret = app.exec();
-    qDebug() << "LogsServicesTester exit";
-    return ret;
+     HbApplication app(argc, argv);
+     app.setApplicationName(QLatin1String("Logs service tester"));
+     HbMainWindow mainWindow;
+
+     LogsServiceTesterWidget* widget = new LogsServiceTesterWidget();
+     mainWindow.addView(widget);
+
+     mainWindow.show();
+     return app.exec();
 }
--- a/recents_plat/logs_engine_api/inc/logsevent.h	Thu May 27 12:51:53 2010 +0300
+++ b/recents_plat/logs_engine_api/inc/logsevent.h	Fri Jun 11 13:38:41 2010 +0300
@@ -27,6 +27,7 @@
 class LogsEventData;
 class LogsEventStrings;
 class CLogEvent;
+class QDataStream;
 
 QTM_BEGIN_NAMESPACE
 class QContactName;
@@ -166,6 +167,16 @@
          */
         LOGSENGINE_EXPORT bool isRead() const;
         
+        /**
+         * Construct event from serialized data stream
+         */
+        LOGSENGINE_EXPORT LogsEvent( QDataStream& serializedEvent );
+        
+        /**
+         * Serialize event to data stream
+         */
+        LOGSENGINE_EXPORT bool serialize( QDataStream& serializeDestination );
+        
     public:
         
         /**
--- a/recents_plat/logs_engine_api/inc/logsmodel.h	Thu May 27 12:51:53 2010 +0300
+++ b/recents_plat/logs_engine_api/inc/logsmodel.h	Fri Jun 11 13:38:41 2010 +0300
@@ -25,6 +25,7 @@
 class LogsDbConnector;
 class LogsMatchesModel;
 class LogsConfigurationParams;
+class LogsDetailsModel;
 
 /**
  * Model for log events.
@@ -112,6 +113,12 @@
      * @return 0 if configured succesfully
      */
     LOGSENGINE_EXPORT int updateConfiguration(LogsConfigurationParams& params);
+    
+    /**
+     * Get details model.
+     * @return details model
+     */
+    LOGSENGINE_EXPORT LogsDetailsModel* logsDetailsModel(LogsEvent& event);
 
 public: // From QAbstractItemModel
     
--- a/recents_plat/logs_services_api/inc/logsservices.h	Thu May 27 12:51:53 2010 +0300
+++ b/recents_plat/logs_services_api/inc/logsservices.h	Fri Jun 11 13:38:41 2010 +0300
@@ -22,11 +22,39 @@
 
 /**
 * Logs application services
+* @deprecated  Use XQApplicationManager instead. 
+*  Service name: "logs",
+*  Interface name: "com.nokia.symbian.ILogsView"
+*  Operation signature: "show(QVariantMap)" 
+*  Operation parameters: 
+*     "view_index": int, 0 - all recent, 1 - received, 2 - called, 3 - missed
+*     "show_dialpad": bool, if true view is shown with dialpad opened on top
+*     "dialpad_text": QString, number to be prefilled into dialpad
+*     
+*  Example usage:
+*  XQApplicationManager appMgr;
+*  QScopedPointer<XQAiwRequest> request(appMgr.create(QString("logs"),
+*                  QString("com.nokia.symbian.ILogsView"), 
+*                  QString("show(QVariantMap)"), false));   
+*  if (!request.isNull()) {
+*      int retValue = -1; 
+*      QList<QVariant> arglist;
+*      QVariantMap map;
+*      map.insert("view_index", QVariant(0));
+*      map.insert("show_dialpad", QVariant(true));
+*      map.insert("dialpad_text", QVariant(QString()));
+*      arglist.append(QVariant(map));
+*      request->setArguments(arglist);
+*      QVariant ret(retValue);        
+*      request->send(ret);
+*  }
+*
 */
 class LogsServices
 {
     public:
     
+    //Deprecated
     enum LogsView{
         ViewAll,
         ViewReceived,
@@ -36,6 +64,9 @@
     /**
      * Requests to start Logs application. If Logs is already running,
      * activates the requested view.
+     * 
+     * @deprecated Use "com.nokia.symbian.ILogsView" interface 
+     * and "show(int,bool,QString)" operation instead
      *
      * @param activatedView   The view to be activated in Logs.
      * @param showDialpad     Specifies whether dialpad should be shown on top
@@ -48,4 +79,5 @@
 
 };
 
+
 #endif  //LOGSSERVICES_H