--- 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;
+}