activityfw/activityserviceplugin/src/activitymanager.cpp
changeset 99 7aaf39b772ac
parent 94 dbb8300717f7
--- a/activityfw/activityserviceplugin/src/activitymanager.cpp	Fri Jun 11 16:13:51 2010 +0300
+++ b/activityfw/activityserviceplugin/src/activitymanager.cpp	Thu Jun 24 16:18:29 2010 +0300
@@ -15,13 +15,33 @@
 *
 */
 
-#include "activitymanager.h"
-#include "activitymanager_p.h"
-
+#include <QStringList>
 #include <QUrl>
 
-ActivityManager::ActivityManager(QObject *parent) : QObject(parent), d_ptr(new ActivityManagerPrivate(this))
+#include <afstorageclient.h>
+#include <afstorageentry.h>
+#include <afstorageglobals.h>
+
+#include "activitymanager.h"
+#include "applicationlauncher.h"
+
+ActivityManager::ActivityManager(const QSharedPointer<AfStorageClient> &serviceProvider, 
+                                 QObject *parent) 
+: 
+    QObject(parent), 
+    mServiceProvider(serviceProvider)
 {
+    if(0 == mServiceProvider->connect()){
+        mServiceProvider->notifyDataChange();
+    }
+    connect(mServiceProvider.data(),
+            SIGNAL(thumbnailRequested(QPixmap, void *)),
+            this,
+            SIGNAL(thumbnailReady(QPixmap, void *)));
+    connect(mServiceProvider.data(),
+            SIGNAL(dataChanged()),
+            this,
+            SIGNAL(dataChanged()));
 }
 
 ActivityManager::~ActivityManager()
@@ -30,12 +50,44 @@
 
 QList<QVariantHash> ActivityManager::activitiesList()
 {
-    return d_ptr->activitiesList();
+    QList<AfStorageEntry> results;
+    mServiceProvider->activities(results);
+    
+    QList<QVariantHash> retVal;
+    QList<AfStorageEntry>::iterator iter(results.begin());
+    for (; iter != results.end(); iter = results.erase(iter)) {
+        retVal.append((*iter).publicData());
+    }
+    return retVal;
 }
 
 void ActivityManager::launchActivity(const QUrl &uri)
 {
-    d_ptr->launchActivity(uri);
+    if (uri.scheme() != "appto")
+        return;
+
+    bool conversionOk(false);
+    int applicationId = uri.host().toUInt(&conversionOk, 16);   
+    if (!conversionOk)
+        return;
+        
+    QVariantHash activity;
+    activity.insert(ActivityApplicationKeyword, applicationId);
+    
+    QVariantHash parameters;
+    QList<QPair<QString, QString> > uriParams = uri.queryItems();
+    for (QList<QPair<QString, QString> >::const_iterator i = uriParams.constBegin(); i != uriParams.constEnd(); ++i) {
+        parameters.insert(i->first, i->second);
+    }
+
+    if (parameters.contains("activityname")) {
+        activity.insert(ActivityActivityKeyword, parameters.value("activityname").toString());
+        parameters.remove("activityname");
+    }
+    
+    activity.insert(ActivityParametersKeyword, parameters);
+    
+    launchActivity(activity);
 }
 
 void ActivityManager::launchActivity(const QString &uri)
@@ -46,10 +98,45 @@
 
 void ActivityManager::launchActivity(int applicationId, const QString &activityId, const QVariantHash& parameters)
 {
-    d_ptr->launchActivity(applicationId, activityId, parameters);
+    QVariantHash activity;
+    activity.insert(ActivityApplicationKeyword, applicationId);
+    activity.insert(ActivityActivityKeyword, activityId);
+    activity.insert(ActivityParametersKeyword, parameters);
+    
+    launchActivity(activity);
 }
 
 void ActivityManager::getThumbnail(QSize resolution,const QString &thumbnailPath, void *data)
 {
-   d_ptr->getThumbnail(resolution, thumbnailPath, data);
+    mServiceProvider->getThumbnail(resolution, thumbnailPath, data);
+}
+
+void ActivityManager::launchActivity(const QVariantHash& activity)
+{
+    ApplicationLauncher applicationLauncher;
+    int applicationId = activity.value(ActivityApplicationKeyword).toInt();
+    AfStorageEntry entry(applicationId, 
+                         activity[ActivityActivityKeyword].toString());
+    if (applicationLauncher.isRunning(applicationId)) {
+        mServiceProvider->launchActivity(entry);
+        applicationLauncher.bringToForeground(applicationId);
+    } else {
+        applicationLauncher.startApplication(applicationId, activityToUri(activity));
+    }
 }
+
+QUrl ActivityManager::activityToUri(const QVariantHash& activity) const
+{
+    QUrl uri;
+    uri.setScheme("appto");
+    uri.setHost(QString("%1").arg(activity.value(ActivityApplicationKeyword).toUInt(), 8, 16, QChar('0')));
+    
+    if (activity.contains(ActivityActivityKeyword))
+        uri.addQueryItem("activityname", activity.value(ActivityActivityKeyword).toString());
+    
+    QVariantHash parameters = activity.value(ActivityParametersKeyword).toHash();
+    foreach(const QString &key, parameters.keys()) {
+        uri.addQueryItem(key, parameters.value(key).toString());
+    } 
+    return uri;
+}