src/hbcore/activity/hbactivitymanager.cpp
changeset 2 06ff229162e9
parent 1 f7ac710697a9
child 5 627c4a0fd0e7
--- a/src/hbcore/activity/hbactivitymanager.cpp	Mon May 03 12:48:33 2010 +0300
+++ b/src/hbcore/activity/hbactivitymanager.cpp	Fri May 14 16:09:54 2010 +0300
@@ -35,7 +35,7 @@
 #include "hbactivityplugininterface_p.h"
 
 /*!
-    @beta
+    @stable
     @hbcore
     \class HbActivityManager
     \brief HbActivityManager is an access point for Activities features.
@@ -69,38 +69,34 @@
 HbActivityPluginInterface *HbActivityManagerPrivate::activityPlugin() const
 {
     if (!mActivityPlugin) {
-        QStringList pluginPathList;
+        foreach (const QString &path, QCoreApplication::libraryPaths()) {
+            QString pluginPath;
+            QString libPath = QDir(path).filePath(QLatin1String("hbactivityplugin"));
+#ifdef Q_OS_SYMBIAN
+            libPath += QLatin1String(".qtplugin");
+            QLibrary library(libPath);           
+            if (QFile::exists(libPath) && library.load()) {
+                library.unload();
+                pluginPath = libPath;
+            }
+#else
+            QLibrary library(libPath);           
+            if (library.load()) {
+                library.unload();
+                pluginPath = library.fileName();
+            }     
+#endif      
+            QPluginLoader loader(pluginPath);
+            QObject *pluginInstance = loader.instance();
+            if (pluginInstance) {
+                mActivityPlugin = qobject_cast<HbActivityPluginInterface*>(pluginInstance);
+                if (mActivityPlugin) {
+                    q->connect(pluginInstance, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString)));
+                } else {
 #if defined(Q_OS_SYMBIAN)
-        QStringList cDriveList;
-        QStringList romList;
-
-        foreach (const QString &libraryPath, qApp->libraryPaths()) {
-            QString absolutePath = QDir(libraryPath).absolutePath();
-            cDriveList << absolutePath.replace(0, 1, 'C');
-            romList << absolutePath.replace(0, 1, 'Z');
-        }
-        pluginPathList << cDriveList << romList;
-#else
-        pluginPathList << qApp->libraryPaths();
+                    qWarning("Cannot load activity plugin. Features related to activities won't be available.");
 #endif
-
-        foreach (const QString &path, pluginPathList) {
-            QDir dir(path);
-            QString filePath = dir.filePath("hbactivityplugin");
-            QLibrary library(filePath);
-            if (library.load()) {
-                QPluginLoader loader(dir.filePath(library.fileName()));
-                QObject *pluginInstance = loader.instance();
-                if (pluginInstance) {
-                    mActivityPlugin = qobject_cast<HbActivityPluginInterface*>(pluginInstance);
-                    if (mActivityPlugin) {
-                        q->connect(pluginInstance, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString)));
-                    } else {
-#if defined(Q_OS_SYMBIAN)
-                        qWarning("Cannot load activity plugin. Features related to activities won't be available.");
-#endif
-                        loader.unload();
-                    }
+                    loader.unload();
                 }
             }
         }
@@ -187,6 +183,22 @@
 }
 
 /*!
+\internal
+*/
+void HbActivityManagerPrivate::parseCommandLine(const QStringList &commandLineParams, Hb::ActivationReason &reason, QString &id, QVariantHash &params) const
+{
+    HbActivityPluginInterface *plugin = activityPlugin();
+    if (plugin) {
+        QVariantHash activityParams = plugin->parseCommandLine(commandLineParams);
+        if (!activityParams.isEmpty()) {
+            reason = Hb::ActivationReasonActivity;
+            id = activityParams.value("activityname").toString();
+            params = activityParams;
+        }
+    }
+}
+
+/*!
     Constructor
     \a parent. Parent of this object.
  */
@@ -266,3 +278,18 @@
     return d->waitActivity();
 }
 
+/*!
+    Searches \a commandLineArguments for pair of "-activity" marker and
+    activity URI, which should have following syntax:
+
+    appto://UID3?activityname=activity-name-value&key1=value
+
+    If both marker and valid URI are found, \a reason is set to
+    Hb::ActivationReasonActivity, and \a activityId and \a parameters are
+    filled with parsed values.
+*/
+void HbActivityManager::parseCommandLine(const QStringList &commandLineParams, Hb::ActivationReason &reason, QString &id, QVariantHash &params) const
+{
+    Q_D(const HbActivityManager);
+    d->parseCommandLine(commandLineParams, reason, id, params);
+}