logsui/logsapp/src/logsviewmanager.cpp
changeset 21 2f0af9ba7665
parent 18 acd4e87b24b4
--- a/logsui/logsapp/src/logsviewmanager.cpp	Fri Sep 17 16:47:32 2010 +0300
+++ b/logsui/logsapp/src/logsviewmanager.cpp	Fri Oct 15 14:47:48 2010 +0300
@@ -24,7 +24,6 @@
 #include "logsdefs.h"
 #include "logslogger.h"
 #include "logsservicehandler.h"
-#include "logsservicehandlerold.h"
 #include "logsmainwindow.h"
 #include "logsappsettings.h"
 #include "logsforegroundwatcher.h"
@@ -35,9 +34,10 @@
 #include <QApplication>
 #include <hblineedit.h>
 #include <dialpad.h>
-#include <hbactivitymanager.h>
 #include <hbapplication.h>
 #include <tstasksettings.h>
+#include <afactivation.h>
+#include <afactivitystorage.h>
 
 // -----------------------------------------------------------------------------
 // LogsViewManager::LogsViewManager
@@ -45,12 +45,11 @@
 //
 LogsViewManager::LogsViewManager( 
         LogsMainWindow& mainWindow, LogsServiceHandler& service,
-        LogsServiceHandlerOld& serviceOld,
         LogsAppSettings& settings) : 
     QObject( 0 ), mMainWindow( mainWindow ), 
-    mService( service ), mServiceOld( serviceOld ), mSettings( settings ),
+    mService( service ), mSettings( settings ),
     mFirstActivation(true), mViewActivationShowDialpad(false), 
-    mBackgroundStartupWatcher(0)
+    mBackgroundStartupWatcher(0), mDialpadText(QString())
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::LogsViewManager()" );
 
@@ -69,14 +68,11 @@
     connect( &mService, SIGNAL( activateView(QString) ), 
              this, SLOT( changeMatchesViewViaService(QString) ));
 
-    connect( &mServiceOld, SIGNAL( activateView(XQService::LogsViewIndex, bool, QString) ), 
-             this, SLOT( changeRecentViewViaService(XQService::LogsViewIndex, bool, QString) ) );
-
-    connect( &mServiceOld, SIGNAL( activateView(QString) ), 
-             this, SLOT( changeMatchesViewViaService(QString) ));
-    
     QObject::connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
 
+    mActivityManager = new AfActivityStorage;
+    mActivation = new AfActivation;
+    
     handleFirstActivation();
     
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::LogsViewManager()" );
@@ -90,7 +86,9 @@
 LogsViewManager::~LogsViewManager()
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::~LogsViewManager()" );
-     
+    
+    delete mActivation;
+    delete mActivityManager;
     delete mComponentsRepository;
     delete mBackgroundStartupWatcher;
     
@@ -160,9 +158,9 @@
 // -----------------------------------------------------------------------------
 //
 bool LogsViewManager::activateView(
-        LogsAppViewId viewId, bool showDialpad, QVariant args)
+        LogsAppViewId viewId, bool showDialpad, QVariant args, const QString& dialpadText)
 {
-    return doActivateView(viewId, showDialpad, args);
+    return doActivateView(viewId, showDialpad, args, dialpadText );  
 }
 
 // -----------------------------------------------------------------------------
@@ -196,11 +194,11 @@
 // Previously activated view is at slot 1 of view stack
 // -----------------------------------------------------------------------------
 //
-bool LogsViewManager::activatePreviousView()
+bool LogsViewManager::activatePreviousView(bool showDialpad,  const QString& dialpadText)
 {
     LogsAppViewId viewId = ( mViewStack.count() > 1 ) ? 
         mViewStack.at(1)->viewId() : LogsRecentViewId;
-    return doActivateView(viewId, false, QVariant());
+    return doActivateView(viewId, showDialpad, QVariant(), dialpadText);
 }
 
 // -----------------------------------------------------------------------------
@@ -249,6 +247,7 @@
         mMainWindow.setInteractive(true);
         mViewActivationArgs = args;
         mViewActivationShowDialpad = showDialpad;
+        mDialpadText = dialpadText;
         completeViewActivation();
         activated = true;
     }
@@ -274,7 +273,7 @@
     } else {
         disconnect( &mMainWindow, SIGNAL(viewReady()), this, SLOT(completeViewActivation()) );
         LogsBaseView* newView = mViewStack.at(0);
-        newView->activated(mViewActivationShowDialpad, mViewActivationArgs);
+        newView->activated(mViewActivationShowDialpad, mViewActivationArgs, mDialpadText);
         connect( &mMainWindow, SIGNAL(callKeyPressed()), 
                  newView, SLOT(callKeyPressed()),
                  Qt::UniqueConnection );
@@ -309,8 +308,7 @@
     }
     
     clearActivities();
-    
-    HbActivityManager* activityManager = static_cast<HbApplication*>(qApp)->activityManager();
+
     QVariantHash metaData;
     LOGS_QDEBUG( "logs [UI] Start taking screenshot" );
     QImage* img = new QImage(mMainWindow.rect().size(), QImage::Format_ARGB32_Premultiplied);
@@ -318,7 +316,7 @@
     // Use render instead of QPixmap::grabWidget as otherwise screenshot
     // may become empty.
     mMainWindow.render( &p, mMainWindow.rect(), mMainWindow.rect() );
-    metaData.insert("screenshot", QPixmap::fromImage(*img));
+    metaData.insert(QString("screenshot"), QPixmap::fromImage(*img));
     delete img;
     LOGS_QDEBUG( "logs [UI] End taking screenshot" );
     
@@ -334,7 +332,7 @@
     QString activityId = mViewStack.at(0)->saveActivity(stream, metaData);
     
     // add the activity to the activity manager
-    bool ok = activityManager->addActivity(activityId, serializedActivity, metaData);
+    bool ok = mActivityManager->saveActivity(activityId, serializedActivity, metaData);
     if ( !ok ){
         LOGS_QDEBUG( "logs [UI] activity adding failed" );
     }
@@ -348,9 +346,11 @@
 bool LogsViewManager::loadActivity()
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::loadActivity()" );
-    HbApplication* hbApp = static_cast<HbApplication*>(qApp);
-    QString activityId = hbApp->activateId();
-    return doLoadActivity(activityId);
+    bool loaded = false;
+    if ( mActivation->reason() == Af::ActivationReasonActivity ){
+        loaded = doLoadActivity(mActivation->name());
+    }
+    return loaded;
 }
 
 // -----------------------------------------------------------------------------
@@ -359,11 +359,7 @@
 //
 LogsAppViewId LogsViewManager::checkMatchesViewTransition(
     LogsAppViewId viewId, const QString& dialpadText)
-{
-    if ( !dialpadText.isEmpty() ){
-        mComponentsRepository->dialpad()->editor().setText(dialpadText);
-    }
-    
+{Q_UNUSED( dialpadText );
     if ( viewId == LogsMatchesViewId ){
         LogsModel* model = mComponentsRepository->model();
         if ( model && model->predictiveSearchStatus() != logsContactSearchEnabled ){
@@ -391,17 +387,13 @@
         setTaskSwitcherVisibility(false);
 
     } else {
-        Hb::ActivationReason reason = static_cast<HbApplication*>(qApp)->activateReason();
-        bool isStartedByService( 
-            mService.isStartedUsingService() || mServiceOld.isStartedUsingService() );
-        
         // Start immediately using all possible resources
         mComponentsRepository->model()->refreshData();
         
-        if ( reason == Hb::ActivationReasonActivity && loadActivity() ){
+        if ( loadActivity() ){
             LOGS_QDEBUG( "logs [UI] loaded saved activity" );    
             mMainWindow.bringAppToForeground();
-        } else if ( mFirstActivation && !isStartedByService ) {
+        } else if ( mFirstActivation && !mService.isStartedUsingService() ) {
             activateDefaultView();
             mMainWindow.bringAppToForeground();
         }
@@ -486,10 +478,13 @@
 //
 // -----------------------------------------------------------------------------
 //
-void LogsViewManager::activityRequested(const QString &activityId)
+void LogsViewManager::activityRequested(
+        Af::ActivationReason reason, QString name, QVariantHash parameters)
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::activityRequested()" );
-    if ( doLoadActivity(activityId) ){
+    Q_UNUSED(reason);
+    Q_UNUSED(parameters);
+    if ( doLoadActivity(name) ){
         mMainWindow.bringAppToForeground();
     }
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::activityRequested()" );
@@ -502,8 +497,6 @@
 void LogsViewManager::bgStartupForegroundGained()
 {
     LOGS_QDEBUG( "logs [UI] -> LogsViewManager::bgStartupForegroundGained()" );
-    delete mBackgroundStartupWatcher;
-    mBackgroundStartupWatcher = 0;
     endFakeExit();
     mMainWindow.bringAppToForeground(); 
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::bgStartupForegroundGained()" );
@@ -516,10 +509,9 @@
 void LogsViewManager::doFakeExit()
 {
     saveActivity();
-    HbActivityManager* activityManager = 
-        static_cast<HbApplication*>(qApp)->activityManager();
-    connect( activityManager, SIGNAL(activityRequested(QString)), 
-             this, SLOT(activityRequested(QString)), Qt::UniqueConnection );
+    connect( mActivation, SIGNAL(activated(Af::ActivationReason,QString,QVariantHash)), 
+             this, SLOT(activityRequested(Af::ActivationReason,QString,QVariantHash)), 
+             Qt::UniqueConnection );
     mComponentsRepository->model()->compressData();
     setTaskSwitcherVisibility(false);
 }
@@ -530,6 +522,8 @@
 //
 void LogsViewManager::endFakeExit()
 {
+    delete mBackgroundStartupWatcher;
+    mBackgroundStartupWatcher = 0;
     setTaskSwitcherVisibility(true);
     mComponentsRepository->model()->refreshData();
     if ( !mMainWindow.currentView() ){
@@ -544,14 +538,8 @@
 //
 bool LogsViewManager::doLoadActivity(const QString& activityId)
 {
-    LOGS_QDEBUG( "logs [UI] -> LogsViewManager::doLoadActivity()" );
+    LOGS_QDEBUG_2( "logs [UI] -> LogsViewManager::doLoadActivity():", activityId );
     bool loaded = false;
-    HbApplication* hbApp = static_cast<HbApplication*>(qApp);
-    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++ ){
@@ -560,8 +548,7 @@
         }
     }
     
-    QList<QVariantHash> allParams = hbApp->activityManager()->activities();  
-    QVariantHash params = allParams.isEmpty() ? QVariantHash() : allParams.at(0);
+    QVariantHash params = mActivityManager->activityMetaData(activityId);
     LOGS_QDEBUG_2( "logs [UI] Activity params", params );
             
     if ( !matchingView ){
@@ -571,14 +558,11 @@
     }
     
     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();
+        QByteArray serializedActivity = 
+                mActivityManager->activityData(activityId).toByteArray();
         QDataStream stream(&serializedActivity, QIODevice::ReadOnly);
         
         QVariant args = matchingView->loadActivity(activityId, stream, params);
@@ -596,13 +580,11 @@
 //
 void LogsViewManager::clearActivities()
 {
-    HbApplication* hbApp = static_cast<HbApplication*>(qApp);
-    HbActivityManager* activityManager = hbApp->activityManager();
     foreach ( LogsBaseView* view, mViewStack ){
-        view->clearActivity(*activityManager);
+        view->clearActivity(*mActivityManager);
     }
-    disconnect( activityManager, SIGNAL(activityRequested(QString)), 
-                this, SLOT(activityRequested(QString)) );
+    disconnect( mActivation, SIGNAL(activated(Af::ActivationReason,QString,QVariantHash)), 
+                this, SLOT(activityRequested(Af::ActivationReason,QString,QVariantHash)) );
 }
 
 // -----------------------------------------------------------------------------
@@ -616,12 +598,7 @@
     LOGS_QDEBUG_2( "logs [UI] -> LogsViewManager::activateViewViaService()", viewId );
     clearActivities();
     closeEmbeddedApplication();
-    Dialpad* dpad = mComponentsRepository->dialpad();
-    if ( !showDialpad ){
-        dpad->closeDialpad();
-    }
-    dpad->editor().setText(dialpadText);
-    if ( doActivateView(viewId, showDialpad, args, QString(), true) ){
+    if ( doActivateView(viewId, showDialpad, args, dialpadText, true) ){  
         mMainWindow.bringAppToForeground();
     }
     LOGS_QDEBUG( "logs [UI] <- LogsViewManager::activateViewViaService()" );