activityfw/activityserviceplugin/src/afclient.cpp
changeset 107 b34d53f6acdf
parent 102 8b8b34fa9751
equal deleted inserted replaced
106:e78d6e055a5b 107:b34d53f6acdf
    14 * Description:
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 #include "afclient.h"
    17 #include "afclient.h"
    18 
    18 
    19 #include <QCoreApplication>
    19 #include "aflauncher.h"
    20 #include <QStringList>
    20 #include "afcommandlineparser.h"
    21 #include <QTimer>
       
    22 #include <QUrl>
       
    23 #include <QDebug>
       
    24 #include <QDir>
       
    25 
    21 
    26 #include <afstorageentry.h>
    22 AfClient::AfClient(const QSharedPointer<AfActivityStorage> &storage, const QSharedPointer<AfActivation> &activation, QObject *parent)
    27 #include <afstorageglobals.h>
       
    28 
       
    29 #include "aflauncher.h"
       
    30 
       
    31 AfClient::AfClient(const QSharedPointer<AfStorageClient> &serviceProvider, QObject *parent) 
       
    32 : 
    23 : 
    33     QObject(parent),
    24     QObject(parent),
    34     mServiceProvider(serviceProvider),
    25     mStorage(storage),
    35     mIsconnected(false)
    26     mActivation(activation)
    36 {
    27 {
    37     mIsconnected = ( KErrNone == mServiceProvider->connect());
    28     connect(mActivation.data(), SIGNAL(activated(Af::ActivationReason,QString,QVariantHash)), this, SLOT(handleActivityRequest(Af::ActivationReason,QString,QVariantHash)));
    38     if( mIsconnected) {
       
    39         mServiceProvider->waitActivity();
       
    40     }
       
    41     connect(mServiceProvider.data(), SIGNAL(activityRequested(QString)), this, SIGNAL(activityRequested(QString)));
       
    42     connect(mServiceProvider.data(), SIGNAL(activityRequested(QString)), this, SLOT(bringToForeground()));
       
    43 }
    29 }
    44 
    30 
    45 AfClient::~AfClient()
    31 AfClient::~AfClient()
    46 {
    32 {
    47 }
    33 }
    48 
    34 
    49 bool AfClient::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    35 bool AfClient::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    50 {
    36 {
    51     bool result(mIsconnected);
    37     return mStorage->saveActivity(activityId, data, parameters);
    52     if (result) {
    38 }
    53         QVariantHash publicData(parameters);
    39 
    54         
    40 bool AfClient::removeActivity(const QString &activityId)
    55         QPixmap screenshot(publicData[ActivityScreenshotKeyword].value<QPixmap>());
    41 {
    56         publicData.remove(ActivityScreenshotKeyword);
    42     return mStorage->removeActivity(activityId);
    57         
    43 }
    58         RProcess process;
    44 
    59         publicData.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
    45 bool AfClient::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
    60         publicData.insert(ActivityActivityKeyword, activityId);
    46 {
    61         AfStorageEntry entry(process.SecureId().iId, activityId, data, publicData);
    47     return mStorage->saveActivity(activityId, data, parameters);
    62         result = (KErrNone == mServiceProvider->addActivity(entry, screenshot));
    48 }
       
    49 
       
    50 QList<QVariantHash> AfClient::activities() const
       
    51 {
       
    52     QList<QVariantHash> result;
       
    53     
       
    54     QStringList activitiesList = mStorage->allActivities();
       
    55     foreach (const QString &activityId, activitiesList) {
       
    56         result.append(mStorage->activityMetaData(activityId));
    63     }
    57     }
    64     return result;
    58     return result;
    65 }
    59 }
    66 
    60 
    67 bool AfClient::removeActivity(const QString &activityId)
       
    68 {
       
    69     bool result(mIsconnected);
       
    70     if (result) {
       
    71         RProcess process;
       
    72         AfStorageEntry entry(process.SecureId().iId, activityId);
       
    73         result = (KErrNone == mServiceProvider->removeActivity(entry));
       
    74     }
       
    75     return result;
       
    76 }
       
    77 
       
    78 bool AfClient::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
       
    79 {
       
    80     bool result(mIsconnected);
       
    81     if (result) {
       
    82         QVariantHash publicData(parameters);
       
    83         QPixmap screenshot(publicData[ActivityScreenshotKeyword].value<QPixmap>());
       
    84         publicData.remove(ActivityScreenshotKeyword);
       
    85         RProcess process;
       
    86         publicData.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
       
    87         publicData.insert(ActivityActivityKeyword, activityId);
       
    88         AfStorageEntry entry(process.SecureId().iId, activityId, data, publicData);
       
    89         result = (KErrNone == mServiceProvider->updateActivity(entry, screenshot));
       
    90     }
       
    91     return result;
       
    92 }
       
    93 
       
    94 QList<QVariantHash> AfClient::activities() const
       
    95 {
       
    96     QList<QVariantHash> retVal;
       
    97     if (mIsconnected) {
       
    98         RProcess process;
       
    99         AfStorageEntry entry(process.SecureId().iId);
       
   100         QList<AfStorageEntry> activities;
       
   101         mServiceProvider->applicationActivities(activities, entry);
       
   102         
       
   103         QList<AfStorageEntry>::iterator iter(activities.begin());
       
   104         for (; activities.end() != iter; iter = activities.erase(iter)) {
       
   105             retVal.append((*iter).publicData());
       
   106         }
       
   107     }
       
   108     return retVal;
       
   109 }
       
   110 
       
   111 QVariant AfClient::activityData(const QString &activityId) const
    61 QVariant AfClient::activityData(const QString &activityId) const
   112 {
    62 {
   113     QVariant data;
    63     return mStorage->activityData(activityId);
   114     if (mIsconnected) {
       
   115         RProcess process;
       
   116         AfStorageEntry entry(static_cast<int>(process.SecureId().iId), activityId), result;
       
   117         if (0 == mServiceProvider->activityData(result, entry)) {
       
   118             data = result.privateData();
       
   119         }
       
   120     }
       
   121     return data;
       
   122 }
    64 }
   123 
    65 
   124 QVariantHash AfClient::parseCommandLine(const QStringList &commandLineParams) const
    66 QVariantHash AfClient::parseCommandLine(const QStringList &commandLineParams) const
   125 {
    67 {
   126      QVariantHash activityParams;
    68     return AfCommandLineParser::getActivityParameters(commandLineParams);
   127     int activityMarkerIndex = commandLineParams.indexOf("-activity");
       
   128     if (activityMarkerIndex != -1 && commandLineParams.count() - 1 > activityMarkerIndex) {
       
   129         QUrl activityUri = QUrl::fromEncoded(commandLineParams.at(activityMarkerIndex+1).toAscii());
       
   130         if (activityUri.scheme() == "appto") {
       
   131             QList<QPair<QString, QString> > parameters = activityUri.queryItems();
       
   132             for (QList<QPair<QString, QString> >::const_iterator i = parameters.constBegin(); i != parameters.constEnd(); ++i) {
       
   133                 activityParams.insert(i->first, i->second);
       
   134             }
       
   135 
       
   136             if (activityParams.contains("activityname") && !activityParams.value("activityname").toString().isEmpty()) {
       
   137                 return activityParams;
       
   138             }
       
   139         }
       
   140     }
       
   141     return QVariantHash();
       
   142 }
    69 }
   143 
    70 
   144 void AfClient::bringToForeground()
    71 void AfClient::handleActivityRequest(Af::ActivationReason reason, const QString &name, const QVariantHash &parameters)
   145 {
    72 {
   146     // process all update events from widgets to prevent flickering
    73     Q_UNUSED(parameters);
   147     QCoreApplication::processEvents();
    74     if (Af::ActivationReasonActivity == reason) {
   148     RProcess process;
    75         emit activityRequested(name);
   149     AfLauncher().bringToForeground(process.SecureId().iId);
    76     }
   150 }
    77 }