# HG changeset patch # User hgs # Date 1269393343 -7200 # Node ID 1e87eb3b400f98f1430f49c2f09c877006a00695 # Parent 7f0462e8c3dac86ded21b0524dbb4d4f0910dc66 201011 diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/activitydatabase.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/activitydatabase.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = subdirs + +SUBDIRS += hsactivitydbclient \ + hsactivitydbserver diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/bwins/hsactivitydbclientu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/bwins/hsactivitydbclientu.def Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,25 @@ +EXPORTS + ?launchActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 1 NONAME ; int HsActivityDbClient::launchActivity(class QHash const &) + ?connect@HsActivityDbClient@@QAEHXZ @ 2 NONAME ; int HsActivityDbClient::connect(void) + ?asyncRequestCompleated@HsActivityDbClient@@UAEXHHABVQString@@@Z @ 3 NONAME ; void HsActivityDbClient::asyncRequestCompleated(int, int, class QString const &) + ?trUtf8@HsActivityDbClient@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString HsActivityDbClient::trUtf8(char const *, char const *) + ?applicationActivities@HsActivityDbClient@@UAEHAAV?$QList@V?$QHash@VQString@@VQVariant@@@@@@ABV?$QHash@VQString@@VQVariant@@@@@Z @ 5 NONAME ; int HsActivityDbClient::applicationActivities(class QList > &, class QHash const &) + ?qt_metacast@HsActivityDbClient@@UAEPAXPBD@Z @ 6 NONAME ; void * HsActivityDbClient::qt_metacast(char const *) + ?qt_metacall@HsActivityDbClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 7 NONAME ; int HsActivityDbClient::qt_metacall(enum QMetaObject::Call, int, void * *) + ?waitActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 8 NONAME ; int HsActivityDbClient::waitActivity(class QHash const &) + ?activities@HsActivityDbClient@@UAEHAAV?$QList@V?$QHash@VQString@@VQVariant@@@@@@@Z @ 9 NONAME ; int HsActivityDbClient::activities(class QList > &) + ?trUtf8@HsActivityDbClient@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString HsActivityDbClient::trUtf8(char const *, char const *, int) + ??0HsActivityDbClient@@QAE@PAVQObject@@@Z @ 11 NONAME ; HsActivityDbClient::HsActivityDbClient(class QObject *) + ?tr@HsActivityDbClient@@SA?AVQString@@PBD0@Z @ 12 NONAME ; class QString HsActivityDbClient::tr(char const *, char const *) + ?getStaticMetaObject@HsActivityDbClient@@SAABUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const & HsActivityDbClient::getStaticMetaObject(void) + ??_EHsActivityDbClient@@UAE@I@Z @ 14 NONAME ; HsActivityDbClient::~HsActivityDbClient(unsigned int) + ?metaObject@HsActivityDbClient@@UBEPBUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const * HsActivityDbClient::metaObject(void) const + ?removeApplicationActivities@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 16 NONAME ; int HsActivityDbClient::removeApplicationActivities(class QHash const &) + ?tr@HsActivityDbClient@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString HsActivityDbClient::tr(char const *, char const *, int) + ?addActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 18 NONAME ; int HsActivityDbClient::addActivity(class QHash const &) + ?staticMetaObject@HsActivityDbClient@@2UQMetaObject@@B @ 19 NONAME ; struct QMetaObject const HsActivityDbClient::staticMetaObject + ??1HsActivityDbClient@@UAE@XZ @ 20 NONAME ; HsActivityDbClient::~HsActivityDbClient(void) + ?activityRequested@HsActivityDbClient@@IAEXABVQString@@@Z @ 21 NONAME ; void HsActivityDbClient::activityRequested(class QString const &) + ?updateActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 22 NONAME ; int HsActivityDbClient::updateActivity(class QHash const &) + ?removeActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 23 NONAME ; int HsActivityDbClient::removeActivity(class QHash const &) + diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/eabi/hsactivitydbclientu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/eabi/hsactivitydbclientu.def Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,34 @@ +EXPORTS + _ZN18HsActivityDbClient10activitiesER5QListI5QHashI7QString8QVariantEE @ 1 NONAME + _ZN18HsActivityDbClient11addActivityERK5QHashI7QString8QVariantE @ 2 NONAME + _ZN18HsActivityDbClient11qt_metacallEN11QMetaObject4CallEiPPv @ 3 NONAME + _ZN18HsActivityDbClient11qt_metacastEPKc @ 4 NONAME + _ZN18HsActivityDbClient12waitActivityERK5QHashI7QString8QVariantE @ 5 NONAME + _ZN18HsActivityDbClient14launchActivityERK5QHashI7QString8QVariantE @ 6 NONAME + _ZN18HsActivityDbClient14removeActivityERK5QHashI7QString8QVariantE @ 7 NONAME + _ZN18HsActivityDbClient14updateActivityERK5QHashI7QString8QVariantE @ 8 NONAME + _ZN18HsActivityDbClient16staticMetaObjectE @ 9 NONAME DATA 16 + _ZN18HsActivityDbClient17activityRequestedERK7QString @ 10 NONAME + _ZN18HsActivityDbClient19getStaticMetaObjectEv @ 11 NONAME + _ZN18HsActivityDbClient21applicationActivitiesER5QListI5QHashI7QString8QVariantEERKS4_ @ 12 NONAME + _ZN18HsActivityDbClient22asyncRequestCompleatedEiiRK7QString @ 13 NONAME + _ZN18HsActivityDbClient27removeApplicationActivitiesERK5QHashI7QString8QVariantE @ 14 NONAME + _ZN18HsActivityDbClient7connectEv @ 15 NONAME + _ZN18HsActivityDbClientC1EP7QObject @ 16 NONAME + _ZN18HsActivityDbClientC2EP7QObject @ 17 NONAME + _ZN18HsActivityDbClientD0Ev @ 18 NONAME + _ZN18HsActivityDbClientD1Ev @ 19 NONAME + _ZN18HsActivityDbClientD2Ev @ 20 NONAME + _ZNK18HsActivityDbClient10metaObjectEv @ 21 NONAME + _ZTI18HsActivityDbClient @ 22 NONAME + _ZTV18HsActivityDbClient @ 23 NONAME + _ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEiiRK7QString @ 24 NONAME + _ZThn8_N18HsActivityDbClient10activitiesER5QListI5QHashI7QString8QVariantEE @ 25 NONAME + _ZThn8_N18HsActivityDbClient11addActivityERK5QHashI7QString8QVariantE @ 26 NONAME + _ZThn8_N18HsActivityDbClient12waitActivityERK5QHashI7QString8QVariantE @ 27 NONAME + _ZThn8_N18HsActivityDbClient14launchActivityERK5QHashI7QString8QVariantE @ 28 NONAME + _ZThn8_N18HsActivityDbClient14removeActivityERK5QHashI7QString8QVariantE @ 29 NONAME + _ZThn8_N18HsActivityDbClient14updateActivityERK5QHashI7QString8QVariantE @ 30 NONAME + _ZThn8_N18HsActivityDbClient21applicationActivitiesER5QListI5QHashI7QString8QVariantEERKS4_ @ 31 NONAME + _ZThn8_N18HsActivityDbClient27removeApplicationActivitiesERK5QHashI7QString8QVariantE @ 32 NONAME + diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/hsactivitydbclient.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/hsactivitydbclient.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,54 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = lib +TARGET = hsactivitydbclient + +QT += core \ + sql + +QT -= gui + +HEADERS += inc/hsactivitydbclient.h + +SOURCES += src/hsactivitydbclient.cpp + +DEFINES += ACTIVITY_LIB + +symbian{ +TARGET.UID3 = 0xE467C21E + +HEADERS += ../s60/inc/hsserializer.h \ + s60/inc/hsactivitydbclient_p.h \ + s60/inc/hsactivitydbasyncrequest_p.h + +SOURCES += ../s60/src/hsserializer.cpp \ + s60/src/hsactivitydbclient_p.cpp \ + s60/src/hsactivitydbasyncrequest_p.cpp + + +hsactivitydbclientdll.sources = hsactivitydbclient.dll +hsactivitydbclientdll.path = $$SHARED_LIB_DIR +DEPLOYMENT += hsactivitydbclientdll + +BLD_INF_RULES.prj_exports += "../inc/hsactivitydbclientinterface.h /epoc32/include/hsactivitydbclientinterface.h" \ + "inc/hsactivitydbclient.h /epoc32/include/hsactivitydbclient.h" \ + "inc/hsactivitydbasyncrequestobserver.h /epoc32/include/hsactivitydbasyncrequestobserver.h" +DEPLOYMENT += api +TARGET.CAPABILITY = ALL -TCB +TARGET.EPOCALLOWDLLDATA = 1 +MMP_RULES += EXPORTUNFROZEN +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/inc/hsactivitydbasyncrequestobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/inc/hsactivitydbasyncrequestobserver.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HSACTIVITYDBASYNCREQUESTOBSERVER_H +#define HSACTIVITYDBASYNCREQUESTOBSERVER_H +#include +class HsActivityDbAsyncRequestObserver +{ +public: + /** + * Function inform observer about asynchronous request results + * @param result - request result + * @param requestType - request type + * @param data - respons data + */ + virtual void asyncRequestCompleated(int result, + int requestType, + const QString& data)=0; +}; +#endif // HSACTIVITYDBASYNCREQUESTOBSERVER_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/inc/hsactivitydbclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/inc/hsactivitydbclient.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,125 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HSACTIVITYDBCLIENT_H +#define HSACTIVITYDBCLIENT_H +#include +#include +#include "hsactivitydbclientinterface.h" + +#ifdef ACTIVITY_LIB + #define ACTIVITY_EXPORT Q_DECL_EXPORT +#else + #define ACTIVITY_EXPORT Q_DECL_IMPORT +#endif + +class HsActivityDbClientPrivate; + +/** + * Class implemets HsActivityDbClientInterface and is responsible for activity data management. + */ +class ACTIVITY_EXPORT HsActivityDbClient: public QObject, + public HsActivityDbClientInterface, + public HsActivityDbAsyncRequestObserver +{ +Q_OBJECT +public: + /** + * Constructor + */ + HsActivityDbClient(QObject* =0); + + /** + * Destructor + */ + ~HsActivityDbClient(); + + /** + * Establish connection with activity server + * @return 0 on succees, error code otherwise + */ + int connect(); + + /** + * Interface implementation. + * @see int HsActivityDbAsyncRequestObserver::asyncRequestCompleated(int, int, const QString&) + */ + void asyncRequestCompleated(int, int, const QString&); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::saveActivity(const QVariantHash&) + */ + int addActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash&) + */ + int updateActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::deleteActivity(const QVariantHash &) + */ + int removeActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::deleteApplicationActivities(const QVariantHash &) + */ + int removeApplicationActivities(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::activities(QList&) + */ + int activities(QList &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::applicationActivities(QList &, const QVariantHash &) + */ + int applicationActivities(QList &, + const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &) + */ + int waitActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::launchActivity(const QVariantHash &) + */ + int launchActivity(const QVariantHash &); +signals: + /** + * Function notify about runtime activity change + * @param activityId - requested activity name + */ + void activityRequested(const QString& activityId); +private: + /** + * Private client implementation. + * Own. + */ + HsActivityDbClientPrivate* d_ptr; +}; + +#endif //HSACTIVITYDBCLIENT_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbasyncrequest_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbasyncrequest_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HSACTIVITYDBASYNCREQUESTPRIVATE_H +#define HSACTIVITYDBASYNCREQUESTPRIVATE_H +#include +#include +#include + +class HsActivityDbClientPrivate; + +/** + * Class is responsible for async. request handling + */ +class HsActivityDbAsyncRequestPrivate : public CActive + +{ +public: + /** + * First step constructor + */ + static HsActivityDbAsyncRequestPrivate* + NewL(HsActivityDbAsyncRequestObserver &, HsActivityDbClientPrivate &); + + /** + * First step constructor + */ + static HsActivityDbAsyncRequestPrivate* + NewLC(HsActivityDbAsyncRequestObserver &, HsActivityDbClientPrivate &); + + /** + * Destructor + */ + ~HsActivityDbAsyncRequestPrivate(); + + /** + * Function create subscription to current ativity changes + * @param condition - activity filetering rules + */ + void waitActivity(const QVariantHash& condition); +protected: + /** + * Interface implementation. + * @see void CActive::DoCancel() + */ + void DoCancel(); + + /** + * Interface implementation. + * @see void CActive::DoCancel() + */ + void RunL(); +private: + /** + * Constructor + */ + HsActivityDbAsyncRequestPrivate(HsActivityDbAsyncRequestObserver &, + HsActivityDbClientPrivate &); +private: + HsActivityDbAsyncRequestObserver& mObserver; + HsActivityDbClientPrivate& mSession; + int mRequestType; + RBuf8 mDataBuf; + TPckgBuf mDataSize; +}; +#endif // HSACTIVITYDBCLIENTPRIVATE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbclient_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbclient_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HSACTIVITYDBCLIENTPRIVATE_H +#define HSACTIVITYDBCLIENTPRIVATE_H +#include "hsactivitydbclientinterface.h" +#include +#include + +class HsActivityDbAsyncRequestPrivate; +/** + * Class implemets HsActivityDbClientInterface and is responsible for + * activity data management on S60 enviroment. + */ +class HsActivityDbClientPrivate : protected RSessionBase, + public HsActivityDbClientInterface +{ +public: + /** + * Constructor + */ + HsActivityDbClientPrivate(HsActivityDbAsyncRequestObserver&); + + /** + * Destructor + */ + ~HsActivityDbClientPrivate(); + + /** + * Function establish connection to activity server + * @return 0 on succees, error code otherwise + */ + int connect(); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::addActivity(const QVariantHash &) + */ + int addActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash &) + */ + int updateActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::removeActivity(const QVariantHash &) + */ + int removeActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::removeApplicationActivities(const QVariantHash &) + */ + int removeApplicationActivities(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::requestedActivityName(QString &, const QVariantHash &); + */ + int requestedActivityName(QString &, const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::activities(QList &); + */ + int activities(QList &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::applicationActivities(QList &, const QVariantHash &) + */ + int applicationActivities(QList&, const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &) + */ + int waitActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::launchActivity(const QVariantHash &) + */ + int launchActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::cancelWaitActivity() + */ + int cancelWaitActivity(); + +public: + /** + * Function get cached data from server + * @param dst - destination, preallocated buffer + */ + void getData(RBuf8 & dst); + + /** + * Function initialize aync request + * @param func - requested function + * @param data - request data + * @param status - request status + */ + void sendDataAsync(int func,const TIpcArgs & data, TRequestStatus& status); + +private: + /** + * Function start activity server process. + * Function can leave on failure. + */ + void startServerL(); + + /** + * Function establish connection to activity server. + * Function can leave on failure + */ + void connectL(); + + /** + * Function execute remote call request. + * @param function - remote function identyfier + * @param activity - remote function parameters + */ + void execSimpleRequestL( int function, const QVariantHash &activity); + + /** + * Function retrieve current activity name for application. + * Function can leave on failure + * @param result - activity name + * @param activity - request filtering rules + */ + void requestedActivityNameL(QString& result, + const QVariantHash &activity); + + /** + * Function retrieve all stored activity + * Function can leave on failure + * @param result - list of activity + */ + void activitiesL(QList& result); + + /** + * Function retrieve all stored activity + * Function can leave on failure + * @param result - list of activity + * @param cond - request conditions + */ + void applicationActivitiesL(QList& result, + const QVariantHash & cond); + + void waitActivityL(const QVariantHash &activity); +private: + /** + * Async request handler + * Own + */ + HsActivityDbAsyncRequestPrivate* mAsyncDataHandler; + +}; +#endif // HSACTIVITYDBCLIENTPRIVATE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbasyncrequest_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbasyncrequest_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "hsactivitydbasyncrequest_p.h" +#include "hsactivitydbclient_p.h" +#include "hsserializer.h" +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbAsyncRequestPrivate* + HsActivityDbAsyncRequestPrivate::NewL(HsActivityDbAsyncRequestObserver& observer, + HsActivityDbClientPrivate& session) +{ + HsActivityDbAsyncRequestPrivate* self = + HsActivityDbAsyncRequestPrivate::NewLC(observer, session); + CleanupStack::Pop(self); + return self; +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbAsyncRequestPrivate* + HsActivityDbAsyncRequestPrivate::NewLC(HsActivityDbAsyncRequestObserver& observer, + HsActivityDbClientPrivate& session) +{ + HsActivityDbAsyncRequestPrivate* self = + new (ELeave)HsActivityDbAsyncRequestPrivate(observer, session); + CleanupStack::PushL(self); + self->mDataBuf.CreateL(64); + return self; +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbAsyncRequestPrivate::HsActivityDbAsyncRequestPrivate(HsActivityDbAsyncRequestObserver &observer, + HsActivityDbClientPrivate &session) +: + CActive(EPriorityStandard), + mObserver(observer), + mSession(session), + mRequestType(-1), + mDataSize() +{ + CActiveScheduler::Add(this); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbAsyncRequestPrivate::~HsActivityDbAsyncRequestPrivate() +{ + mDataBuf.Close(); + Cancel(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbAsyncRequestPrivate::DoCancel() +{ + if(IsActive()) { + mSession.cancelWaitActivity(); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbAsyncRequestPrivate::RunL() +{ + RBuf8 buff; + CleanupClosePushL(buff); + QString data; + int requestResult(iStatus.Int()); + if(KErrNone == requestResult) { + if(0 < mDataSize()) { + buff.CreateL(mDataSize()); + } + mSession.getData(buff); + data = QString::fromAscii(reinterpret_cast(buff.Ptr()), + buff.Length()); + buff.Close(); + } + mObserver.asyncRequestCompleated(requestResult, mRequestType, data); + CleanupStack::PopAndDestroy(&buff); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbAsyncRequestPrivate::waitActivity(const QVariantHash& condition) +{ + mRequestType = WaitActivity; + iStatus = KRequestPending; + SetActive(); + mDataBuf << condition; + mSession.sendDataAsync(mRequestType, TIpcArgs(&mDataBuf, &mDataSize), iStatus); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbclient_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbclient_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "hsactivitydbclient_p.h" +#include "hsactivitydbasyncrequest_p.h" +#include "hsactivityglobals.h" +#include "hsserializer.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbClientPrivate::HsActivityDbClientPrivate(HsActivityDbAsyncRequestObserver& observer) +{ + mAsyncDataHandler = HsActivityDbAsyncRequestPrivate::NewL(observer, *this); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbClientPrivate::~HsActivityDbClientPrivate() +{ + delete mAsyncDataHandler; + Close(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::connect() +{ + TRAPD(errNo, connectL()); + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::addActivity(const QVariantHash &activity) +{ + TRAPD( errNo, execSimpleRequestL(AddActivity, activity);) + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::updateActivity(const QVariantHash &activity) +{ + TRAPD( errNo, execSimpleRequestL(UpdateActivity, activity);) + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::removeActivity(const QVariantHash &activity) +{ + TRAPD( errNo, execSimpleRequestL(RemoveActivity, activity);) + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::removeApplicationActivities(const QVariantHash &activity) +{ + TRAPD( errNo, execSimpleRequestL(RemoveApplicationActivities, activity);) + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::activities(QList& result) +{ + TRAPD(errNo, activitiesL(result)); + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::applicationActivities(QList& result, + const QVariantHash & condition) +{ + TRAPD(errNo, applicationActivitiesL(result, condition)); + return errNo; +} + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::waitActivity(const QVariantHash &activity) +{ + TRAPD( errNo, waitActivityL(activity);) + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::launchActivity(const QVariantHash &activity) +{ + TRAPD( errNo, execSimpleRequestL(LaunchActivity, activity);) + return errNo; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClientPrivate::cancelWaitActivity() +{ + return SendReceive(CancelWait, TIpcArgs()); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::startServerL() +{ + RProcess server; + const TUidType uid(KNullUid, KNullUid, KActivityServerUid); + User::LeaveIfError(server.Create( KActivityServerName, KNullDesC, uid)); + TRequestStatus stat; + server.Rendezvous( stat ); + if ( stat != KRequestPending ) { + server.Kill(0); + } else { + server.Resume(); + } + User::WaitForRequest(stat); + int errNo = (EExitPanic == server.ExitType()) ? + KErrGeneral : stat.Int(); + if(KErrCancel == errNo) { + errNo = KErrNone; + } + server.Close(); + User::LeaveIfError(errNo); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::connectL() +{ + const int asyncMessageSlots(4); + const int maxRetry(4); + + TInt retry = maxRetry; + TInt errNo(KErrNone); + do { + errNo = CreateSession( KActivityServerName, TVersion( 0, 0, 0 ), asyncMessageSlots ); + if( KErrNotFound != errNo && KErrServerTerminated != errNo) { + retry =0; + } else { + TRAP(errNo, startServerL()); + if (KErrNone != errNo && KErrAlreadyExists != errNo) { + retry =0; + } + } + } while(--retry > 0); + User::LeaveIfError(errNo); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::execSimpleRequestL(int function, const QVariantHash &activity) +{ + RBuf8 data; + CleanupClosePushL(data); + data.CreateL(256); + data << activity; + User::LeaveIfError(SendReceive(function, TIpcArgs(&data))); + CleanupStack::PopAndDestroy(&data); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::requestedActivityNameL(QString& result, + const QVariantHash &activity) +{ + RBuf8 data; + TPckgBuf sizeBuf; + CleanupClosePushL(data); + data.CreateL(256); + data << activity; + User::LeaveIfError(SendReceive(RequestedActivityName, TIpcArgs(&data,&sizeBuf))); + if(sizeBuf() > data.MaxSize()) { + data.ReAlloc(sizeBuf()); + } + User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data))); + result = QString::fromAscii(reinterpret_cast(data.Ptr()), + data.Length()); + CleanupStack::PopAndDestroy(&data); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::activitiesL(QList& result) +{ + RBuf8 data; + TPckgBuf sizeBuf; + CleanupClosePushL(data); + data.CreateL(256); + User::LeaveIfError(SendReceive(Activities, TIpcArgs(&data, &sizeBuf))); + if(sizeBuf() > data.MaxSize()) { + data.ReAlloc(sizeBuf()); + } + User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data))); + result << data; + CleanupStack::PopAndDestroy(&data); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::applicationActivitiesL(QList& result, + const QVariantHash & condition) +{ + RBuf8 data; + TPckgBuf sizeBuf; + CleanupClosePushL(data); + data.CreateL(256); + data << condition; + User::LeaveIfError(SendReceive(ApplicationActivities, TIpcArgs(&data, &sizeBuf))); + if(sizeBuf() > data.MaxSize()) { + data.ReAlloc(sizeBuf()); + } + User::LeaveIfError(SendReceive(GetData, TIpcArgs(&data))); + result << data; + CleanupStack::PopAndDestroy(&data); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::waitActivityL(const QVariantHash &activity) +{ + if(mAsyncDataHandler->IsActive()) { + User::Leave(KErrServerBusy); + } else { + mAsyncDataHandler->waitActivity(activity); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::getData(RBuf8& data) +{ + SendReceive(GetData, TIpcArgs(&data)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClientPrivate::sendDataAsync(int func, + const TIpcArgs &data, + TRequestStatus& status) +{ + SendReceive(func, data, status); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbclient/src/hsactivitydbclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbclient/src/hsactivitydbclient.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,138 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "hsactivitydbclient.h" +#include "hsactivitydbclient_p.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbClient::HsActivityDbClient(QObject* obj) +: + QObject(obj), + d_ptr(0) +{ + d_ptr = new HsActivityDbClientPrivate(*this); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityDbClient::~HsActivityDbClient() +{ + delete d_ptr; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::connect() +{ + return d_ptr->connect(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityDbClient::asyncRequestCompleated(int result, + int requestType, + const QString& data) +{ + switch(requestType){ + case WaitActivity: + if( KErrNone == result ) { + emit activityRequested(data); + } + break; + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::addActivity(const QVariantHash &activity) +{ + return d_ptr->addActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::updateActivity(const QVariantHash &activity) +{ + return d_ptr->updateActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::removeActivity(const QVariantHash &activity) +{ + return d_ptr->removeActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::removeApplicationActivities(const QVariantHash &activity) +{ + return d_ptr->removeApplicationActivities(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::activities(QList& result) +{ + return d_ptr->activities(result); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::applicationActivities(QList & result, + const QVariantHash & conditions) +{ + return d_ptr->applicationActivities(result, conditions); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::waitActivity(const QVariantHash &activity) +{ + return d_ptr->waitActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityDbClient::launchActivity(const QVariantHash &activity) +{ + return d_ptr->launchActivity(activity); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/hsactivitydbserver.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/hsactivitydbserver.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,49 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = app +TARGET = hsactivitydbserver + +QT += core \ + gui \ + sql + +HEADERS += ../inc/hsactivitydbclientinterface.h \ + inc/hsactivity.h \ + inc/hsactivityserver.h \ + inc/hsactivitystorage.h \ + inc/hsactivitystorage_p.h + +SOURCES += src/hsactivityserver.cpp \ + src/hsactivitystorage.cpp \ + src/hsactivitystorage_p.cpp + +symbian{ +TARGET.UID3 = 0x200267B4 +HEADERS += ../s60/inc/hsactivityglobals.h \ + ../s60/inc/hsserializer.h \ + s60/inc/hsactivityserver_p.h \ + s60/inc/hsactivitysession_p.h + + +SOURCES += s60/src/main.cpp \ + ../s60/src/hsserializer.cpp \ + s60/src/hsactivityserver_p.cpp \ + s60/src/hsactivitysession_p.cpp + +TARGET.CAPABILITY = ALL -TCB +} + diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivity.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivity.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HSACTIVITY_H +#define HSACTIVITY_H + + +const char ActivityOrganization [] = "nokia"; + +const char ActivityApplication [] = "hsactivitydbserver"; + +const char ActivityStorageDriver [] = "QSQLITE"; + +const char ActivityStorageName [] = "ActivitySQLClient"; + +const char ActivityStorageProperty [] = "activitydatabase"; + +const char ActivityDefaultStorage [] = "activitydatabase.db"; + +const char ActivityTableKeyword [] = ":Table"; +const char ActivityDataKeyword [] = ":Data"; + + + +const char ActivityCreateQuery [] = "CREATE TABLE Activities(" \ + "ApplicationId INTEGER NOT NULL," \ + "ActivityName TEXT NOT NULL," \ + "Data BLOB NOT NULL," \ + "PRIMARY KEY ( ApplicationId, ActivityName ) )"; + +const char ActivityDropQuery [] = "DROP TABLE :Table"; + +const char ActivitySelectActivityQuery [] = "SELECT ApplicationId FROM Activities WHERE " \ + "ApplicationId = :ApplicationId AND " \ + "ActivityName = :ActivityName"; + +const char ActivityUpdateActivityQuery [] = "UPDATE Activities SET Data = :Data WHERE " \ + "ApplicationId = :ApplicationId AND " \ + "ActivityName = :ActivityName"; + +const char ActivityInsertActivityQuery [] = "INSERT INTO Activities( ApplicationId, ActivityName, Data ) VALUES " \ + "( :ApplicationId, :ActivityName, :Data )"; + +const char ActivitySelectActiveQuery [] = "SELECT ActivityName FROM Activities WHERE " \ + "ApplicationId = :ApplicationId"; + +const char ActivityActivitiesQuery [] = "SELECT Data FROM Activities"; + +const char ActivityApplicationActivitiesQuery [] = "SELECT Data FROM Activities " \ + "WHERE ApplicationId = :ApplicationId"; + +const char ActivityDeleteActivityQuery [] = "DELETE FROM Activities WHERE " \ + "ApplicationId = :ApplicationId AND " \ + "ActivityName = :ActivityName"; + +const char ActivityDeleteApplicationActivitiesQuery [] = "DELETE FROM Activities WHERE " \ + "ApplicationId = :ApplicationId"; + +#endif //HSACTIVITY_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivityserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivityserver.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HSACTIVITYSERVER_H +#define HSACTIVITYSERVER_H + +#include "hsactivitydbclientinterface.h" + +class HsActivityServerPrivate; + +/** + * Class implemets server functionality to store and retrieve activity + */ +class HsActivityServer +{ +public: + /** + * Constructor + * @param storage - reference to initialized activity storage + */ + HsActivityServer(HsActivityDbClientInterface& storage); + + /** + * Destructor + */ + ~HsActivityServer(); + + /** + * Function establish server and initialize listening proces + * @return true on succees, false otherwise + */ + bool start(); +private: + /** + * Private server implementation + */ + HsActivityServerPrivate* d_ptr; +}; + +#endif //HSACTIVITYSERVER_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivitystorage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivitystorage.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HSACTIVITYSTORAGE_H +#define HSACTIVITYSTORAGE_H +#include "hsactivitydbclientinterface.h" +class HsActivityStoragePrivate; + +/** + * Class implements HsActivityDbClientInterface and storage functionality + */ +class HsActivityStorage: public HsActivityDbClientInterface +{ +public: + /** + * Constructor + */ + HsActivityStorage(); + + /** + * Destructor + */ + ~HsActivityStorage(); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::addActivity(const QVariantHash&) + */ + int addActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash&) + */ + int updateActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::removeActivity(const QVariantHash &) + */ + int removeActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::removeApplicationActivities(const QVariantHash &) + */ + int removeApplicationActivities(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::activities(QList &) + */ + int activities(QList& result); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::applicationActivities(QList &, const QVariantHash &) + */ + int applicationActivities(QList& result, + const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &) + */ + int waitActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::launchActivity(const QVariantHash &) + */ + int launchActivity(const QVariantHash &activity); +private: + /** + * Private storage implementation + * Own. + */ + HsActivityStoragePrivate* d_ptr; +}; +#endif //HSACTIVITYSTORAGE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivitystorage_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/inc/hsactivitystorage_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HSACTIVITYSTORAGEPRIVATE_H +#define HSACTIVITYSTORAGEPRIVATE_H +#include "hsactivitydbclientinterface.h" +#include + +/** + * Class implements HsActivityDbClientInterface and storage functionality using + * database subsystem + */ +class HsActivityStoragePrivate: public HsActivityDbClientInterface +{ +public: + /** + * Constructor + */ + HsActivityStoragePrivate(); + + /** + * Destructor + */ + ~HsActivityStoragePrivate(); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::addActivity(const QVariantHash&) + */ + int addActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash&) + */ + int updateActivity(const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::removeActivity(const QVariantHash &) + */ + int removeActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::removeApplicationActivities(const QVariantHash &) + */ + int removeApplicationActivities(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::requestedActivityName( QString &, const QVariantHash &) + */ + int requestedActivityName(QString& result, + const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::activities(QList &) + */ + int activities(QList &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::applicationActivities(QList &, const QVariantHash &) + */ + int applicationActivities(QList &, const QVariantHash &); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &) + */ + int waitActivity(const QVariantHash &activity); + + /** + * Interface implementation. + * @see int HsActivityDbClientInterface::launchActivity(const QVariantHash &) + */ + int launchActivity(const QVariantHash &activity); +private: + /** + * Function check database structure + * @return true if structure is valid, false otherwise + */ + bool checkTables(); + + /** + * Function create database structure + */ + void recreateTables(); + + /** + * Function return last SQL query error code + * @param querty - executed sql query + * @return SQL query error code + */ + int getSqlErrorCode(const QSqlQuery& query); + + /** + * Function exeute SQL query + * @param query - SQL + * @return true on succees, false otherwise + */ + bool exec(QSqlQuery& query); + + /** + * Function exeute SQL query + * @param query - SQL query that has to be executed + * @return true on succees, false otherwise + */ + bool exec(const QString &query, const QVariantHash& params); + + /** + * Funciton bind provided filtering rules with prepared SQL query + * @param query - SQL query + * @param activity - filtering rules + * @param additionalData - additional filetering rules + */ + void bind( QSqlQuery& query, + const QVariantHash &activity, + const QVariantHash &additionalData = QVariantHash()); + + /** + * Funciton get records that match conditions + * @param result - output destination + * @param query - SQL query sting + * @param conditions - query conditions + */ + int activities(QList &results, + const QString &query, + const QVariantHash &conditions); + +private: + /** + * Connectioin to SQL engine + */ + QSqlDatabase mConn; +}; +#endif //HSACTIVITYSTORAGEPRIVATE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/s60/inc/hsactivityserver_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/s60/inc/hsactivityserver_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HSACTIVITYSERVERPRIVATE_H +#define HSACTIVITYSERVERPRIVATE_H + +#include +#include "hsactivitydbclientinterface.h" + +/** + * Class implemets server functionality for S60 enviroment + */ +class HsActivityServerPrivate : public CServer2 +{ +public: + /** + * Constructor + */ + HsActivityServerPrivate(HsActivityDbClientInterface& storage); + + /** + * Destructor + */ + ~HsActivityServerPrivate(); + + /** + * Function establish server and initialize listening proces + * @return true on succees, false otherwise + */ + bool start(); + + /** + * Function look for active application session and complete pending message + */ + void notifyL(int applicationId, const QString& activityName); + + /** + * Cancel notification + */ + void cancelNotify(int applicationId); + + /** + * Function add item to pending messages + */ + void waitNotification(int applicationId, const RMessage2& msg); +private: + /** + * Function create new client session to handle its request + * @param version - client implementation version + * @param message - request message + */ + CSession2* NewSessionL(const TVersion& version,const RMessage2& message)const; + +private: + /** + * Reference to initialized storage client + */ + HsActivityDbClientInterface& mStorage; + + QHash mPendingMessage; +}; + +#endif //HSACTIVITYSERVERPRIVATE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/s60/inc/hsactivitysession_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/s60/inc/hsactivitysession_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,155 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef ACTIVITYSESSIONPRIVATE_H +#define ACTIVITYSESSIONPRIVATE_H +#include +#include "hsactivitydbclientinterface.h" +/** + * Class impolements client session for S60 enviroment. + * Class is responsible for request handling and data translations + */ +class HsActivitySessionPrivate: public CSession2 +{ +public: + /** + * Constructor + * @param storage - reference to initialized activity storage + */ + HsActivitySessionPrivate(HsActivityDbClientInterface& storage); + + /** + * Destructor + */ + ~HsActivitySessionPrivate(); + + /** + * Implements interface + * @see void CSession2::ServiceL(const RMessage2&) + */ + void ServiceL(const RMessage2& message); + + /** + * Implements interface + * @see void CSession2::ServiceError(const RMessage2 &, TInt) + */ + void ServiceError(const RMessage2 &message, TInt error); + + void LaunchActivityL(const RMessage2 &message, const QString &name ); + + void CancelNotify(RMessage2& message); +private: + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleAddActivityL(const RMessage2& message); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleUpdateActivityL(const RMessage2& message); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleRemoveActivityL(const RMessage2& message); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleRemoveApplicationActivitiesL(const RMessage2& message); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleActivitiesL(const RMessage2& message); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleApplicationActivitiesL(const RMessage2& message); + + /** + * Function handle data translation and forward request to server + * Function can leave on failure. + * @param message - request message + */ + void HandleLaunchActivityL(const RMessage2& message); + + /** + * Function handle data translation and forward request to server + * Function can leave on failure. + * @param message - request message + */ + void HandleWaitActivityL(const RMessage2& message); + + /** + * Function cancels subscribtion + * @param message - request message + */ + void HandleCancelWaitActivity(const RMessage2& message); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void HandleGetDataL(const RMessage2& message); + + void LaunchActivityL(); + + void WaitActivityL(const RMessage2& message); + + void CancelNotify(); + + + /** + * Function deserialize data for request message + * Function can leave on failure. + */ + void ReadDataL(const RMessage2& src); + + /** + * Function handle data translation and forward request to storage client + * Function can leave on failure. + * @param message - request message + */ + void LeaveIfNotZero(int errNo); +private: + /** + * Reference to storage client + */ + HsActivityDbClientInterface& mStorage; + RBuf8 mData; + QVariantHash mActivity; + QList mResult; + QString mName; + int mAppId; +}; +#endif // ACTIVITYSESSIONPRIVATE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/s60/src/hsactivityserver_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/s60/src/hsactivityserver_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Application entry point +* +*/ +#include "hsactivityserver_p.h" +#include "hsactivitysession_p.h" +#include "hsactivityglobals.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityServerPrivate::HsActivityServerPrivate(HsActivityDbClientInterface& storage) +: + CServer2( EPriorityNormal, ESharableSessions), + mStorage(storage) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityServerPrivate::~HsActivityServerPrivate() +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool HsActivityServerPrivate::start() +{ + return ( KErrNone == Start(KActivityServerName) ); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityServerPrivate::notifyL(int applicationId, + const QString& activityName) +{ + if(mPendingMessage.end() != mPendingMessage.find(applicationId)) { + static_cast(mPendingMessage.find(applicationId).value().Session()) + ->LaunchActivityL(mPendingMessage.find(applicationId).value(), activityName ); + mPendingMessage.erase(mPendingMessage.find(applicationId)); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityServerPrivate::waitNotification(int applicationId, + const RMessage2& msg) +{ + if(mPendingMessage.find(applicationId) != mPendingMessage.end()) { + msg.Kill(EBadMessageNumber); + } + mPendingMessage.insert(applicationId,msg); +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityServerPrivate::cancelNotify(int applicationId) + { + if(mPendingMessage.end() != mPendingMessage.find(applicationId)) + { + static_cast(mPendingMessage.find(applicationId).value().Session()) + ->CancelNotify(mPendingMessage.find(applicationId).value()); + mPendingMessage.erase(mPendingMessage.find(applicationId)); + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +CSession2* HsActivityServerPrivate::NewSessionL(const TVersion&, + const RMessage2&)const +{ + return new (ELeave) HsActivitySessionPrivate(mStorage); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/s60/src/hsactivitysession_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/s60/src/hsactivitysession_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,286 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Application entry point +* +*/ +#include "hsactivityserver_p.h" +#include "hsactivitysession_p.h" +#include "hsactivityglobals.h" +#include "hsserializer.h" +#include + +const char ActivityPrimaryKeyFormat [] = "%1:%2"; +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivitySessionPrivate::HsActivitySessionPrivate(HsActivityDbClientInterface& storage) +: mStorage(storage), mAppId(KErrNotFound) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivitySessionPrivate::~HsActivitySessionPrivate() +{ + CancelNotify(); + mData.Close(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::ServiceL(const RMessage2& message) +{ + mActivity.clear(); + mResult.clear(); + mName.clear(); + + int errNo(KErrNone); + switch(message.Function()) { + case AddActivity: HandleAddActivityL(message); break; + case UpdateActivity: HandleUpdateActivityL(message); break; + case RemoveActivity: HandleRemoveActivityL(message); break; + case RemoveApplicationActivities: HandleRemoveApplicationActivitiesL(message); break; + case Activities: HandleActivitiesL(message);break; + case ApplicationActivities: HandleApplicationActivitiesL(message);break; + case LaunchActivity: HandleLaunchActivityL(message);break; + case WaitActivity: HandleWaitActivityL(message);return; //!!!!! This message shouldn't be compleated !!!!! + case GetData: HandleGetDataL(message); break; + case CancelWait: HandleCancelWaitActivity(message); break; + default: + message.Panic(KErr400, CServer2::EBadMessageNumber); + } + message.Complete(KErrNone); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::ServiceError(const RMessage2 &message, TInt error) +{ + message.Complete(error); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleAddActivityL(const RMessage2& message) +{ + ReadDataL(message); + LeaveIfNotZero(mStorage.addActivity(mActivity)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleUpdateActivityL(const RMessage2& message) +{ + ReadDataL(message); + LeaveIfNotZero(mStorage.updateActivity(mActivity)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleRemoveActivityL(const RMessage2& message) +{ + ReadDataL(message); + LeaveIfNotZero(mStorage.removeActivity(mActivity)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleRemoveApplicationActivitiesL(const RMessage2& message) +{ + ReadDataL(message); + LeaveIfNotZero(mStorage.removeApplicationActivities(mActivity)); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleActivitiesL(const RMessage2& message) +{ + int errNo(KErrNone); + QT_TRYCATCH_LEAVING(errNo = mStorage.activities(mResult)); + LeaveIfNotZero(errNo); + mData << mResult; + TPckgC dataSize(mData.Size()); + message.WriteL(1, dataSize); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleApplicationActivitiesL(const RMessage2& message) +{ + int errNo(KErrNone); + ReadDataL(message); + QT_TRYCATCH_LEAVING(errNo = mStorage.applicationActivities(mResult, mActivity)); + LeaveIfNotZero(errNo); + mData << mResult; + TPckgC dataSize(mData.Size()); + message.WriteL(1, dataSize); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleLaunchActivityL(const RMessage2& message) +{ + ReadDataL(message); + LaunchActivityL(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleWaitActivityL(const RMessage2& message) +{ + ReadDataL(message); + WaitActivityL(message); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleCancelWaitActivity(const RMessage2& /*message*/) + { + CancelNotify(); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::HandleGetDataL(const RMessage2& message) +{ + message.WriteL(0, mData); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::LaunchActivityL() +{ + CServer2* const server(const_cast(Server())); + if(mActivity.end() == mActivity.find(ActivityApplicationKeyword) || + mActivity.end() == mActivity.find(ActivityActivityKeyword)) { + User::Leave(KErrCorrupt); + } + static_cast + (server)->notifyL(mActivity.find(ActivityApplicationKeyword).value().toInt(), + mActivity.find(ActivityActivityKeyword).value().toString()); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::LaunchActivityL(const RMessage2 &message, + const QString &name ) +{ + if (mData.MaxSize() < name.toAscii().length()){ + mData.ReAlloc( name.toAscii().length()); + } + mData.Copy(reinterpret_cast(name.toAscii().data()), + name.toAscii().length()); + TPckgC dataSize(mData.Size()); + message.WriteL(1, dataSize); + message.Complete(KErrNone); +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::WaitActivityL(const RMessage2& msg) +{ + CServer2* const server(const_cast(Server())); + if(mActivity.end() == mActivity.find(ActivityApplicationKeyword)) { + User::Leave(KErrCorrupt); + } + mAppId = mActivity.find(ActivityApplicationKeyword).value().toInt(); + static_cast + (server)->waitNotification(mAppId, msg); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::CancelNotify() + { + if ( mAppId != KErrNotFound ) + { + CServer2* const server(const_cast(Server())); + static_cast(server)->cancelNotify(mAppId); + mAppId = KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::CancelNotify(RMessage2& message) + { + message.Complete(KErrCancel); + } + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::ReadDataL(const RMessage2& src) +{ + int srcLength = src.GetDesLength(0); + User::LeaveIfError(srcLength); + RBuf8 buffer; + CleanupClosePushL(buffer); + buffer.CreateL(srcLength); + src.ReadL( 0, buffer, 0); + if (buffer.Length() != srcLength) { + User::Leave(KErrCorrupt); + } + mActivity << buffer; + CleanupStack::PopAndDestroy(&buffer); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivitySessionPrivate::LeaveIfNotZero(int errNo) +{ + if (KErrNone != errNo) { + User::LeaveIfError(errNo); + User::Leave(KErrGeneral); + } +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/s60/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/s60/src/main.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Application entry point +* +*/ +#include +#include + +#include "hsactivityserver.h" +#include "hsactivitystorage.h" + + + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + HsActivityStorage storage; + HsActivityServer server(storage); + int retVal(KErrGeneral); + if( server.start() ){ + RProcess::Rendezvous(KErrNone); + retVal = app.exec(); + }else + RProcess::Rendezvous(retVal); + return retVal; +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/src/hsactivityserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/src/hsactivityserver.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Application entry point +* +*/ +#include "hsactivityserver.h" +#include "hsactivityserver_p.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityServer::HsActivityServer(HsActivityDbClientInterface& storage) +: + d_ptr(new HsActivityServerPrivate(storage)) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityServer::~HsActivityServer() +{ + delete d_ptr; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool HsActivityServer::start() +{ + return d_ptr->start(); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/src/hsactivitystorage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/src/hsactivitystorage.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Application entry point +* +*/ +#include "hsactivitystorage.h" +#include "hsactivitystorage_p.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityStorage::HsActivityStorage() +: +d_ptr(new HsActivityStoragePrivate()) +{ +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityStorage::~HsActivityStorage() +{ + delete d_ptr; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::addActivity(const QVariantHash& activity) +{ + return d_ptr->addActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::updateActivity(const QVariantHash& activity) +{ + return d_ptr->updateActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::removeActivity(const QVariantHash& activity) +{ + return d_ptr->removeActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::removeApplicationActivities(const QVariantHash& activity) +{ + return d_ptr->removeApplicationActivities(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::activities(QList& result) +{ + return d_ptr->activities(result); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::applicationActivities(QList& result, + const QVariantHash &activity) +{ + return d_ptr->applicationActivities(result, activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::waitActivity(const QVariantHash &activity) +{ + return d_ptr->waitActivity(activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStorage::launchActivity(const QVariantHash &activity) +{ + return d_ptr->launchActivity(activity); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/src/hsactivitystorage_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/src/hsactivitystorage_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,345 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include +#include +#include +#include +#include "hsactivitystorage_p.h" +#include "hsactivity.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityStoragePrivate::HsActivityStoragePrivate() +{ + // determine database localization + QSettings settings(ActivityOrganization, ActivityApplication); + settings.setValue(ActivityStorageProperty, ActivityDefaultStorage); + if (!settings.contains(ActivityStorageProperty)) { + settings.setValue(ActivityStorageProperty, ActivityDefaultStorage); + } + QString databaseFile = settings.value(ActivityStorageProperty).toString(); + + if (QSqlDatabase::contains(ActivityStorageName)) { + mConn = QSqlDatabase::database(ActivityStorageName); + } else { + mConn = QSqlDatabase::addDatabase(ActivityStorageDriver, ActivityStorageName); + mConn.setDatabaseName(databaseFile); + if (!mConn.open()) { + qWarning(qPrintable(mConn.lastError().text())); + return; + } + } + if (!checkTables()) { + recreateTables(); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +HsActivityStoragePrivate::~HsActivityStoragePrivate() +{ + mConn.close(); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::addActivity(const QVariantHash &activity) +{ + // stream whole entry to bytearray + QByteArray streamedData; + QDataStream stream(&streamedData, QIODevice::WriteOnly); + stream << activity; + + //insert data + QSqlQuery query(mConn); + query.prepare(ActivitySelectActivityQuery); + bind(query, activity); + exec(query); + if(query.next()) { + return KErrGeneral; + } + query.prepare(ActivityInsertActivityQuery); + QVariantHash additionalData; + additionalData.insert(ActivityDataKeyword, streamedData); + bind(query, activity, additionalData); + exec(query); + return 0>=query.numRowsAffected() ? KErrGeneral : getSqlErrorCode(query); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::updateActivity(const QVariantHash &activity) +{ + // stream whole entry to bytearray + QByteArray streamedData; + QDataStream stream(&streamedData, QIODevice::WriteOnly); + stream << activity; + + // update + QSqlQuery query(mConn); + query.prepare(ActivityUpdateActivityQuery); + QVariantHash additionalData; + additionalData.insert(ActivityDataKeyword, streamedData); + bind(query, activity, additionalData); + exec(query); + return 0>=query.numRowsAffected() ? KErrGeneral : getSqlErrorCode(query); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::removeActivity(const QVariantHash &activity) +{ + return exec(ActivityDeleteActivityQuery, activity); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::removeApplicationActivities(const QVariantHash &activity) +{ + return exec(ActivityDeleteApplicationActivitiesQuery, activity); +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::requestedActivityName(QString& result, + const QVariantHash &activity) +{ + QSqlQuery query(mConn); + query.prepare(ActivitySelectActiveQuery); + bind(query, activity); + int retVal(KErrNone); + if (exec(query) && query.next()) { + result = query.value(0).toString(); + } else { + retVal = KErrNotFound; + } + return retVal; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::activities(QList& result) +{ + return activities(result, ActivityActivitiesQuery, QVariantHash()); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::applicationActivities(QList & result, + const QVariantHash & condition) +{ + return activities(result, ActivityApplicationActivitiesQuery, condition); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::waitActivity(const QVariantHash &) +{ + return KErrNotSupported; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::launchActivity(const QVariantHash &) +{ + return KErrNotSupported; +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool HsActivityStoragePrivate::checkTables() +{ + return (QStringList("Activities") == mConn.tables()); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityStoragePrivate::recreateTables() +{ + //start sql transaction + if (!mConn.transaction()) { + qErrnoWarning(qPrintable(mConn.lastError().text())); + return; + } + + // drop any existing tables + QSqlQuery query(mConn); + foreach (const QString &tableName, mConn.tables()) { + query.prepare(ActivityDropQuery); + query.bindValue(ActivityTableKeyword, tableName); + exec(query); + } + + // create new table + query.prepare(ActivityCreateQuery); + exec(query); + + //finish sql transaction + if (!mConn.commit()) { + qErrnoWarning(qPrintable(mConn.lastError().text())); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::getSqlErrorCode(const QSqlQuery& query) +{ + const QSqlError err(query.lastError()); + const QString errStr(err.text()); + + if (QSqlError ::NoError == err.type()) { + return 0; + } else { + qErrnoWarning(qPrintable(errStr)); + return err.number(); + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool HsActivityStoragePrivate::exec(QSqlQuery& query) +{ + const bool retVal = query.exec(); + qErrnoWarning(qPrintable(query.lastQuery())); + if (!retVal) { + getSqlErrorCode(query); + } + return retVal; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +bool HsActivityStoragePrivate::exec(const QString &queryStr, const QVariantHash& params) +{ + QSqlQuery query(mConn); + query.prepare(queryStr); + bind(query, params); + query.exec(); + return getSqlErrorCode(query); + +} +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void HsActivityStoragePrivate::bind( QSqlQuery& query, + const QVariantHash &activity, + const QVariantHash &additionalData) +{ + const QChar tag(' '); + QString queryString( query.lastQuery() ); + QVariantHash::const_iterator iter; + int offset(0); + QStringList tokens; + + //explode SQL query to tokens + do { + offset = queryString.indexOf(tag, 0); + if (0 < offset) { + tokens << queryString.left(offset++); + queryString = queryString.right(queryString.length() - offset); + } else { + if (0 < queryString.length()) { + tokens << queryString; + } + break; + } + } while (true); + + //current Sql driver doesnt support proper query formating. + //reuest filtering data has to be binded in right order. + QStringList::iterator token = tokens.begin(); + //iterate all tokens + for (; token != tokens.end(); token = tokens.erase(token)) { + //iterate all provided data and chcek if it match pattern + for ( iter = activity.constBegin(); + iter != activity.constEnd(); + ++iter ) { + if( (*token).contains(iter.key()) ){ + query.bindValue(iter.key(), iter.value()); + break; + } + } + for (iter = additionalData.constBegin(); + iter != additionalData.constEnd(); + ++iter) { + if ((*token).contains(iter.key())) { + query.bindValue(iter.key(), iter.value()); + break; + } + } + } +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +int HsActivityStoragePrivate::activities(QList &results, + const QString &queryStr, + const QVariantHash &conditions) +{ + results.clear(); + + QSqlQuery query(mConn); + query.prepare(queryStr); + bind(query, conditions); + if (exec(query)) { + QVariantHash activityEntry; + while (query.next()) { + activityEntry.clear(); + QByteArray data(query.value(0).toByteArray()); + QDataStream stream(&data, QIODevice::ReadOnly); + stream >> activityEntry; + results.append(activityEntry); + } + } + return getSqlErrorCode(query); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/hsactivitydbserver/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/hsactivitydbserver/src/main.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Application entry point +* +*/ +#include +#include + +#include "hsactivityserver.h" +#include "hsactivitystorage.h" + + + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + HsActivityStorage storage; + HsActivityServer server(storage); + int retVal(KErrGeneral); + if( server.start() ){ + retVal = app.exec(); + } + return retVal; +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/inc/hsactivitydbclientinterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/inc/hsactivitydbclientinterface.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HSACTIVITYDBCLIENTINTERFACE_H +#define HSACTIVITYDBCLIENTINTERFACE_H +#include + +/** + * Enumerate supported functions + */ +enum ClientFunctions +{ + AddActivity =0, + UpdateActivity, + RemoveActivity, + RemoveApplicationActivities, + RequestedActivityName, + Activities, + ApplicationActivities, + WaitActivity, + LaunchActivity, + GetData, + CancelWait +}; + +const char ActivityApplicationKeyword [] = ":ApplicationId"; +const char ActivityActivityKeyword [] = ":ActivityName"; + +class HsActivityDbClientInterface +{ +public: + + /** + * Function save provided avtivity in activity storage + * @param activity - activity to store + * @return 0 on succees, error code otherwise + */ + virtual int addActivity(const QVariantHash &activity) =0; + + /** + * Function update exiting activity + * @param activity - filtering rules + * @return 0 on succees, error code otherwise + */ + virtual int updateActivity(const QVariantHash &activity) =0; + + /** + * Function delete activity + * @param activity - filtering rules + * @return 0 on succees, error code otherwise + */ + virtual int removeActivity(const QVariantHash &activity) =0; + + /** + * Function delete activity for application + * @param activity - filtering rules + * @return 0 on succees, error code otherwise + */ + virtual int removeApplicationActivities(const QVariantHash &activity) =0; + + /** + * Function return list of all activity + * @param result - destination list + * @return 0 on succees, error code otherwise + */ + virtual int activities(QList& result) =0; + + /** + * Function return list of all activity + * @param result - destination list, + * @param activity - filtering rules + * @return 0 on succees, error code otherwise + */ + virtual int applicationActivities(QList& result, + const QVariantHash &activity) =0; + + /** + * Function subscribe to activity + * @param activity - filtering rules + * @return 0 on succees, error code otherwise + */ + virtual int waitActivity(const QVariantHash &activity)=0; + + /** + * Function launch application activity + * @param activity - filtering rules + * @return 0 on succees, error code otherwise + */ + virtual int launchActivity(const QVariantHash &activity)=0; +}; +#endif //HSACTIVITYDBCLIENTINTERFACE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/s60/inc/hsactivityglobals.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/s60/inc/hsactivityglobals.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYSYMBIAN_H +#define ACTIVITYSYMBIAN_H + +#include +const TUid KActivityServerUid = {0x200267B4}; +_LIT( KActivityServerName, "hsactivitydbserver" ); +_LIT( KErr400, "Bad Reqest" ); +_LIT( KErr403, "Access denied" ); + +#endif diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/s60/inc/hsserializer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/s60/inc/hsserializer.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef HSSERIALIZER_H +#define HSSERIALIZER_H +#include + +/** + * Operator serialize VarinatHash to RBuf8 + */ +RBuf8& operator <<(RBuf8& dst, const QVariantHash& src); + +/** + * Operator deserialize RBuf8 to VarinatHash + */ +QVariantHash& operator <<(QVariantHash& dst, const TDesC8& src); + +/** + * Operator serialize QList to RBuf8 + */ +RBuf8& operator <<(RBuf8& dst, const QList& src); + +/** + * Operator deserialize RBuf8 to QList + */ +QList& operator <<(QList& dst, const TDesC8& src); +#endif diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitydatabase/s60/src/hsserializer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitydatabase/s60/src/hsserializer.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,82 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "hsserializer.h" + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +RBuf8& operator <<(RBuf8& dst, const QVariantHash& src) +{ + QByteArray buffer; + QDataStream stream(&buffer, QIODevice::WriteOnly); + + QT_TRYCATCH_LEAVING(stream << src); + const int dataLength(buffer.length()); + const unsigned char* dataPtr(reinterpret_cast(buffer.constData())); + if( dst.MaxLength() < dataLength ) { + dst.ReAllocL(dataLength); + } + dst.Copy(dataPtr, dataLength); + return dst; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QVariantHash& operator <<(QVariantHash& dst, const TDesC8& src) +{ + QByteArray buffer( QByteArray::fromRawData(reinterpret_cast(src.Ptr()), + src.Length()) ); + + QDataStream stream(&buffer, QIODevice::ReadOnly); + QT_TRYCATCH_LEAVING(stream >> dst); + return dst; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +RBuf8& operator <<(RBuf8& dst, const QList& src) +{ + QByteArray buffer; + QDataStream stream(&buffer, QIODevice::WriteOnly); + + QT_TRYCATCH_LEAVING(stream << src); + + if( dst.MaxLength() < buffer.length() ) { + dst.ReAllocL(buffer.length()); + } + dst.Copy(reinterpret_cast(buffer.data()), buffer.length()); + return dst; +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +QList& operator <<(QList& dst, const TDesC8& src) +{ + QByteArray buffer(QByteArray::fromRawData(reinterpret_cast(src.Ptr()), + src.Length())); + + QDataStream stream(&buffer, QIODevice::ReadOnly); + QT_TRYCATCH_LEAVING(stream >> dst); + return dst; +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitylauncher/activitylauncher.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitylauncher/activitylauncher.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,31 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = app + +TARGET = activitylauncher + +CONFIG += hb console mobility +MOBILITY = serviceframework + +SOURCES = main.cpp \ + activitylauncherview.cpp \ + +HEADERS = activitylauncherview.h \ + +symbian { + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB +} \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitylauncher/activitylauncherview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitylauncher/activitylauncherview.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "activitylauncherview.h" + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include + +QTM_USE_NAMESPACE + +ActivityLauncherView::ActivityLauncherView(QGraphicsItem *parent) : HbView(parent), mModel(NULL), mActivityManager(NULL) +{ + QServiceManager serviceManager; + mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); + + if (!mActivityManager) { + qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service"); + } + + // create UI + setTitle(tr("Activity launcher")); + QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical); + QGraphicsLinearLayout* statusLayout = new QGraphicsLinearLayout(Qt::Horizontal); + mStatusLabel = new HbLabel(this); + mStatusLabel->setAlignment(Qt::AlignLeft); + statusLayout->setMaximumHeight(15); + + HbLabel* statusHeader = new HbLabel("Status: "); + statusHeader->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + statusLayout->addItem(statusHeader); + statusLayout->addItem(mStatusLabel); + + HbGridView* activities = new HbGridView(); + connect(activities, SIGNAL(activated(QModelIndex)), this, SLOT(itemPressed(QModelIndex))); + activities->setRowCount(1); + activities->setColumnCount(1); + + activities->setScrollDirections(Qt::Horizontal); + + mModel = new QStandardItemModel(this); + activities->setModel(mModel); + + layout->addItem(statusLayout); + layout->addItem(activities); + + setLayout(layout); + qApp->installEventFilter(this); + getActivitiesList(); +} + +ActivityLauncherView::~ActivityLauncherView() +{ + delete mActivityManager; +} + +void ActivityLauncherView::getActivitiesList() +{ + mStatusLabel->setPlainText("Fetching activities"); + mCurrentActivities.clear(); + QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList, mCurrentActivities)); + mModel->clear(); + + foreach(const QVariantHash& activityEntry, mCurrentActivities) { + QStandardItem* newItem = new QStandardItem(QIcon(activityEntry.value("screenshot").value()), QString("%1").arg(activityEntry.value(ActivityActivityKeyword).toInt())); + mModel->invisibleRootItem()->appendRow(newItem); + } + mStatusLabel->setPlainText(QString("Ready (%1 activities)").arg(mCurrentActivities.count())); +} + +bool ActivityLauncherView::eventFilter(QObject* obj, QEvent* event) +{ + if (event->type() == QEvent::ApplicationActivate) { + getActivitiesList(); + } + return QObject::eventFilter(obj, event); +} + +void ActivityLauncherView::itemPressed(const QModelIndex& index) +{ + QVariantHash activity = mCurrentActivities.at(index.row()); + int applicationId = activity.value(ActivityApplicationKeyword).toInt(); + QString activityName = activity.value(ActivityActivityKeyword).toString(); + QMetaObject::invokeMethod(mActivityManager, "launchActivity", Q_ARG(int, applicationId), Q_ARG(QString, activityName)); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitylauncher/activitylauncherview.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitylauncher/activitylauncherview.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYLAUNCHERVIEW_H +#define ACTIVITYLAUNCHERVIEW_H + +#include +#include + +class HbLabel; +class QStandardItemModel; + +class ActivityLauncherView : public HbView +{ + Q_OBJECT + +public: + ActivityLauncherView(QGraphicsItem *parent = 0); + ~ActivityLauncherView(); + +private slots: + void itemPressed(const QModelIndex& index); + +protected: + bool eventFilter(QObject* obj, QEvent* event); + +private: + void getActivitiesList(); + +private: + QStandardItemModel* mModel; + QList mCurrentActivities; + HbLabel* mStatusLabel; + + QObject* mActivityManager; +}; + +#endif // ACTIVITYLAUNCHERVIEW_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitylauncher/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitylauncher/main.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include + +#include +#include + +#include "activitylauncherview.h" + +int main(int argc, char *argv[]) +{ + HbApplication app(argc, argv); + + HbMainWindow mainWindow; + ActivityLauncherView mainView; + mainWindow.addView(&mainView); + mainWindow.show(); + + return app.exec(); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activitymanager.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activitymanager.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,32 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = subdirs + +CONFIG += ordered + +symbian:SUBDIRS += activitydatabase + +SUBDIRS += activityserviceplugin \ + activitylauncher \ + orbitintegration/hbactivityplugin + + + +tests:SUBDIRS += activityserviceplugin/unittests +symbian:SUBDIRS += activityserviceplugin/symbianinstaller + +symbian:include(rom.pri) \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityclient.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "activityclient.h" +#include "activityclient_p.h" + +ActivityClient::ActivityClient(QObject *parent) : QObject(parent), d_ptr(new ActivityClientPrivate(this)) +{ +} + +ActivityClient::~ActivityClient() +{ +} + +bool ActivityClient::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + return d_ptr->addActivity(activityId, data, parameters); +} + +bool ActivityClient::removeActivity(const QString &activityId) +{ + return d_ptr->removeActivity(activityId); +} + +bool ActivityClient::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + return d_ptr->updateActivity(activityId, data, parameters); +} + +QList ActivityClient::activities() const +{ + return d_ptr->activities(); +} + +QVariant ActivityClient::activityData(const QString &activityId) const +{ + return d_ptr->activityData(activityId); +} + +bool ActivityClient::waitActivity() +{ + return d_ptr->waitActivity(); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityclient.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYCLIENT_H +#define ACTIVITYCLIENT_H + +#include +#include +#include + +class ActivityClientPrivate; + +class ActivityClient : public QObject +{ + +Q_OBJECT + +public: + ActivityClient(QObject *parent = 0); + ~ActivityClient(); + +public slots: + bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + bool removeActivity(const QString &activityId); + bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + QList activities() const; + QVariant activityData(const QString &activityId) const; + bool waitActivity(); + +signals: + void activityRequested(const QString &activityId); + +private: + ActivityClientPrivate *d_ptr; + friend class ActivityClientPrivate; + +}; + +#endif // ACTIVITYCLIENT_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityclient_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityclient_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,103 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "activityclient_p.h" +#include "activityclient.h" +#include "activitydatastorage.h" +#include + +#include +#include + +ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q) +{ + mDataStorage = new ActivityDataStorage(); + mServerClient = new HsActivityDbClient(); + mServerClient->connect(); + connect(mServerClient, SIGNAL(activityRequested(QString)), q, SIGNAL(activityRequested(QString))); +} + +ActivityClientPrivate::~ActivityClientPrivate() +{ + delete mServerClient; + delete mDataStorage; +} + +bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + QVariantHash activity(parameters); + mDataStorage->addActivity(activityId, data); + RProcess process; + + activity.insert(ActivityApplicationKeyword, static_cast(process.SecureId().iId)); + activity.insert(ActivityActivityKeyword, activityId); + mServerClient->addActivity(activity); + + // @todo make those operations atomic + // @todo return real result + return true; +} + +bool ActivityClientPrivate::removeActivity(const QString &activityId) +{ + QVariantHash activity; + RProcess process; + activity.insert(ActivityApplicationKeyword, static_cast(process.SecureId().iId)); + activity.insert(ActivityActivityKeyword, activityId); + mDataStorage->removeActivity(activityId); + mServerClient->removeActivity(activity); + // @todo make those operations atomic + // @todo return real result + return true; +} + +bool ActivityClientPrivate::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + QVariantHash activity(parameters); + RProcess process; + activity.insert(ActivityApplicationKeyword, static_cast(process.SecureId().iId)); + activity.insert(ActivityActivityKeyword, activityId); + mDataStorage->updateActivity(activityId, data); + mServerClient->updateActivity(activity); + // @todo make those operations atomic + // @todo return real result + return true; +} + +QList ActivityClientPrivate::activities() const +{ + QVariantHash activity; + RProcess process; + activity.insert(ActivityApplicationKeyword, static_cast(process.SecureId().iId)); + + QList activities; + + mServerClient->applicationActivities(activities, activity); + return activities; +} + +QVariant ActivityClientPrivate::activityData(const QString &activityId) const +{ + return mDataStorage->activityData(activityId); +} + +bool ActivityClientPrivate::waitActivity() +{ + RProcess process; + QVariantHash activity; + activity.insert(ActivityApplicationKeyword, static_cast(process.SecureId().iId)); + return !mServerClient->waitActivity(activity); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityclient_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityclient_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYCLIENT_P_H +#define ACTIVITYCLIENT_P_H + +#include +#include +#include +#include + +class ActivityClient; +class ActivityDataStorage; +class ActivityServerClient; +class HsActivityDbClient; + +class ActivityClientPrivate : public QObject +{ + +Q_OBJECT + +public: + ActivityClientPrivate(ActivityClient *q); + ~ActivityClientPrivate(); + +public: + bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + bool removeActivity(const QString &activityId); + bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + QList activities() const; + QVariant activityData(const QString &activityId) const; + bool waitActivity(); + + +private: + ActivityClient* q_ptr; + ActivityDataStorage* mDataStorage; + HsActivityDbClient* mServerClient; +}; + +#endif // ACTIVITYCLIENT_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activitydatastorage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activitydatastorage.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,171 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "activitydatastorage.h" + +#include +#include +#include +#include + +const char KConnectionName[] = "ActivityDataStorage"; + +ActivityDataStorage::ActivityDataStorage() +{ + QSqlDatabase database; + if (QSqlDatabase::contains(KConnectionName)) { + database = QSqlDatabase::database(KConnectionName); + } else { + database = QSqlDatabase::addDatabase("QSQLITE", KConnectionName); + database.setDatabaseName("activitydatastorage.db"); + if (!database.open()) { + qFatal(qPrintable(database.lastError().text())); + } + } + + if (!checkTables()) { + recreateTables(); + } +} + +ActivityDataStorage::~ActivityDataStorage() +{ + QSqlDatabase::database(KConnectionName).close(); +} + +bool ActivityDataStorage::addActivity(const QString &activityId, const QVariant &data) +{ + QSqlDatabase database = QSqlDatabase::database(KConnectionName); + + QByteArray streamedData; + { + QDataStream stream(&streamedData, QIODevice::WriteOnly); + stream << data; + } + + // insert data + QSqlQuery query(database); + if (!query.prepare("INSERT INTO Activities(Name, Data) VALUES(:Name, :Data)")) { + qCritical(qPrintable(query.lastError().text())); + return false; + } + query.bindValue(":Name", activityId); + query.bindValue(":Data", streamedData); + if (!query.exec()) { + qCritical(qPrintable(query.lastError().text())); + return false; + } + + return true; +} + +bool ActivityDataStorage::removeActivity(const QString &activityId) +{ + QString sqlCommand = QString("DELETE FROM Activities WHERE Name = '%1'").arg(activityId); + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + if (!query.exec(sqlCommand)) { + qCritical(qPrintable(query.lastError().text())); + return false; + } + return query.numRowsAffected() > 0; +} + +bool ActivityDataStorage::updateActivity(const QString &activityId, const QVariant &data) +{ + QSqlDatabase database = QSqlDatabase::database(KConnectionName); + + QByteArray streamedData; + { + QDataStream stream(&streamedData, QIODevice::WriteOnly); + stream << data; + } + + // update data + QSqlQuery query(database); + if (!query.prepare("UPDATE Activities SET Data = :Data WHERE Name = :Name")) { + qCritical(qPrintable(query.lastError().text())); + return false; + } + query.bindValue(":Data", streamedData); + query.bindValue(":Name", activityId); + if (!query.exec()) { + qCritical(qPrintable(query.lastError().text())); + return false; + } + + return query.numRowsAffected() > 0; +} + +QVariant ActivityDataStorage::activityData(const QString &activityId) const +{ + QSqlDatabase database = QSqlDatabase::database(KConnectionName); + QSqlQuery query(database); + if (!query.exec(QString("SELECT Data FROM Activities WHERE Name = '%1'").arg(activityId))) { + qCritical(qPrintable(query.lastError().text())); + return QVariant(); + } + + QVariant result; + if (query.next()) { + QByteArray data(query.value(0).toByteArray()); + QDataStream stream(&data, QIODevice::ReadOnly); + stream >> result; + } + return result; +} + +bool ActivityDataStorage::checkTables() +{ + QStringList expectedTables("Activities"); + QStringList actualTables = QSqlDatabase::database(KConnectionName).tables(); + return (expectedTables == actualTables); +} + +void ActivityDataStorage::recreateTables() +{ + QSqlDatabase database = QSqlDatabase::database(KConnectionName); + + if (!database.transaction()) { + qFatal(qPrintable(database.lastError().text())); + } + + // drop any existing tables + { + QSqlQuery dropQuery(database); + foreach(const QString &tableName, database.tables()) { + if (!dropQuery.exec(QString("DROP TABLE %1").arg(tableName))) { + qFatal(qPrintable(dropQuery.lastError().text())); + } + } + } + + // create new table + { + QSqlQuery createQuery(database); + QString statement( + "CREATE TABLE Activities(" + "Name TEXT NOT NULL PRIMARY KEY UNIQUE," + "Data BLOB NOT NULL)"); + + if (!createQuery.exec(statement)) { + qFatal(qPrintable(createQuery.lastError().text())); + } + } + + if (!database.commit()) { + qFatal(qPrintable(database.lastError().text())); + } +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activitydatastorage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activitydatastorage.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYDATASTORAGE_H +#define ACTIVITYDATASTORAGE_H + +#include +#include + +class ActivityDataStorage +{ + +public: + ActivityDataStorage(); + ~ActivityDataStorage(); + +public: + bool addActivity(const QString &activityId, const QVariant &data); + bool removeActivity(const QString &activityId); + bool updateActivity(const QString &activityId, const QVariant &data); + QVariant activityData(const QString &activityId) const; + +private: + bool checkTables(); + void recreateTables(); + +}; + +#endif // ACTIVITYDATASTORAGE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activitymanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activitymanager.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "activitymanager.h" +#include "activitymanager_p.h" + +ActivityManager::ActivityManager(QObject *parent) : QObject(parent), d_ptr(new ActivityManagerPrivate(this)) +{ +} + +ActivityManager::~ActivityManager() +{ +} + +QList ActivityManager::activitiesList() +{ + return d_ptr->activitiesList(); +} + +void ActivityManager::launchActivity(const QString &uri) +{ + d_ptr->launchActivity(uri); +} + +void ActivityManager::launchActivity(int applicationId, const QString &activityId) +{ + d_ptr->launchActivity(applicationId, activityId); +} + +void ActivityManager::removeActivity(int applicationId, const QString &activityId) +{ + d_ptr->removeActivity(applicationId, activityId); +} + +void ActivityManager::removeApplicationActivities(int applicationId) +{ + d_ptr->removeApplicationActivities(applicationId); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activitymanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activitymanager.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYMANAGER_H +#define ACTIVITYMANAGER_H + +#include +#include +#include + +class ActivityManagerPrivate; + +class ActivityManager : public QObject +{ + +Q_OBJECT + +public: + ActivityManager(QObject *parent = 0); + ~ActivityManager(); + +public slots: + QList activitiesList(); + void launchActivity(const QString &uri); + void launchActivity(int applicationId, const QString &activityId); + void removeActivity(int applicationId, const QString &activityId); + void removeApplicationActivities(int applicationId); + +private: + ActivityManagerPrivate *d_ptr; + + friend class ActivityManagerPrivate; + +}; + +#endif // ACTIVITYMANAGER_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activitymanager_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activitymanager_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "activitymanager_p.h" +#include "activitymanager.h" +#include + +#include +#include + +ActivityManagerPrivate::ActivityManagerPrivate(ActivityManager *q) : QObject(q), q_ptr(q) +{ + mServerClient = new HsActivityDbClient(); + mServerClient->connect(); +} + +ActivityManagerPrivate::~ActivityManagerPrivate() +{ + delete mServerClient; +} + +QList ActivityManagerPrivate::activitiesList() +{ + QList retVal; + mServerClient->activities(retVal); + return retVal; +} + +void ActivityManagerPrivate::launchActivity(const QString &uri) +{ + // @todo use the same parser as in HbApplicationPrivate (if possible) + QRegExp uriMatcher("^appto://(.+)\\?activityname=(.+)$"); + if (uriMatcher.indexIn(uri) != -1) { + QStringList list = uriMatcher.capturedTexts(); + Q_ASSERT(list.count() == 3); + launchActivity(list.at(1).toInt(), list.at(2)); + } else { + qWarning("Activity URI parsing error"); + } +} + +void ActivityManagerPrivate::launchActivity(int applicationId, const QString &activityId) +{ + + ApplicationLauncher applicationLauncher; + if(applicationLauncher.isRunning(applicationId)) { + QVariantHash activity; + activity.insert(ActivityApplicationKeyword, applicationId); + activity.insert(ActivityActivityKeyword, activityId); + mServerClient->launchActivity(activity); + applicationLauncher.bringToForeground(applicationId); + } else { + applicationLauncher.startApplication(applicationId, activityId); + } +} + +void ActivityManagerPrivate::removeActivity(int applicationId, const QString &activityId) +{ + QVariantHash activity; + activity.insert(ActivityApplicationKeyword, applicationId); + activity.insert(ActivityActivityKeyword, activityId); + mServerClient->removeActivity(activity); +} + +void ActivityManagerPrivate::removeApplicationActivities(int applicationId) +{ + QVariantHash activity; + activity.insert(ActivityApplicationKeyword, applicationId); + mServerClient->removeApplicationActivities(activity); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activitymanager_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activitymanager_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYMANAGER_P_H +#define ACTIVITYMANAGER_P_H + +#include +#include +#include +#include "applicationlauncher.h" + +class ActivityManager; +class HsActivityDbClient; + +class ActivityManagerPrivate : public QObject +{ + +Q_OBJECT + +public: + ActivityManagerPrivate(ActivityManager *q); + ~ActivityManagerPrivate(); + +public slots: + QList activitiesList(); + void launchActivity(const QString &uri); + void launchActivity(int applicationId, const QString &activityId); + void removeActivity(int applicationId, const QString &activityId); + void removeApplicationActivities(int applicationId); + +private: + ActivityManager *q_ptr; + HsActivityDbClient *mServerClient; + + +}; + +#endif // ACTIVITYMANAGER_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityserviceplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityserviceplugin.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "activityserviceplugin.h" + +#include +#include +#include + +#include "activityclient.h" +#include "activitymanager.h" + +QObject* ActivityServicePlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, QServiceContext *context, QAbstractSecuritySession *session) +{ + Q_UNUSED(context); + Q_UNUSED(session); + + if (descriptor.interfaceName() == "com.nokia.qt.activities.ActivityClient") { + return new ActivityClient(); + } else if (descriptor.interfaceName() == "com.nokia.qt.activities.ActivityManager") { + return new ActivityManager(); + } else { + return NULL; + } +} + +Q_EXPORT_PLUGIN2(activityserviceplugin, ActivityServicePlugin) diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityserviceplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityserviceplugin.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYSERVICEPLUGIN_H +#define ACTIVITYSERVICEPLUGIN_H + +#include +#include + +QTM_USE_NAMESPACE + +class ActivityServicePlugin : public QObject, public QServicePluginInterface +{ + Q_OBJECT + Q_INTERFACES(QtMobility::QServicePluginInterface) + +public: + QObject* createInstance(const QServiceInterfaceDescriptor &descriptor, QServiceContext *context, QAbstractSecuritySession *session); + +}; + +#endif //ACTIVITYSERVICEPLUGIN_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityserviceplugin.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityserviceplugin.pri Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +CONFIG += mobility +MOBILITY = serviceframework + +QT += sql diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityserviceplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityserviceplugin.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,64 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = lib +TARGET = activityserviceplugin + +CONFIG += plugin +include(activityserviceplugin.pri) + +HEADERS += activityserviceplugin.h \ + activitydatastorage.h \ + activityclient.h \ + activityclient_p.h \ + activitymanager.h \ + activitymanager_p.h \ + applicationlauncher.h \ + +SOURCES += activityserviceplugin.cpp \ + activitydatastorage.cpp \ + activityclient.cpp \ + activityclient_p.cpp \ + activitymanager.cpp \ + activitymanager_p.cpp \ + applicationlauncher.cpp \ + +symbian { + INCLUDEPATH += ./s60/ + SOURCES += ./s60/applicationlauncher_p.cpp + + HEADERS += ./s60/applicationlauncher_p.h + + LIBS += -lhsactivitydbclient \ + -lxqutils \ + +} + +win32 { + INCLUDEPATH += ./win/ + SOURCES += ./win/applicationlauncher_p.cpp + + HEADERS += ./win/applicationlauncher_p.h +} + +symbian { + load(data_caging_paths) + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB + + plugin.sources = activityserviceplugin.dll + plugin.path = $$QT_PLUGINS_BASE_DIR +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/activityserviceplugin.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/activityserviceplugin.xml Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,16 @@ + + + ActivityService + activityserviceplugin + Activities service + + com.nokia.qt.activities.ActivityClient + 1.0 + Implementation of ActivityClient + + + com.nokia.qt.activities.ActivityManager + 1.0 + Implementation of ActivityManager + + diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/applicationlauncher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/applicationlauncher.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "applicationlauncher.h" +#include "applicationlauncher_p.h" + +ApplicationLauncher::ApplicationLauncher() : d_ptr(new ApplicationLauncherPrivate()) +{ +} + +ApplicationLauncher::~ApplicationLauncher() +{ + delete d_ptr; +} + +bool ApplicationLauncher::isRunning(int applicationId) +{ + return d_ptr->isRunning(applicationId); +} + +void ApplicationLauncher::startApplication(int applicationId, const QString &activityId) +{ + d_ptr->startApplication(applicationId, activityId); +} + +void ApplicationLauncher::bringToForeground(int applicationId) +{ + d_ptr->bringToForeground(applicationId); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/applicationlauncher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/applicationlauncher.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef APPLICATIONLAUNCHER_H +#define APPLICATIONLAUNCHER_H + +class ApplicationLauncherPrivate; + +#include + +class ApplicationLauncher +{ + +public: + ApplicationLauncher(); + ~ApplicationLauncher(); + +public: + bool isRunning(int applicationId); + void startApplication(int applicationId, const QString &activityId); + void bringToForeground(int applicationId); + +private: + ApplicationLauncherPrivate *d_ptr; + +}; + +#endif // APPLICATIONLAUNCHER_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/s60/activitydatabase_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/s60/activitydatabase_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "activitydatabase_p.h" + +#include +#include +#include +#include +#include + + + +ActivityDatabasePrivate::ActivityDatabasePrivate() +{ + mClient.connect(); +} + +ActivityDatabasePrivate::~ActivityDatabasePrivate() +{ +} + +void ActivityDatabasePrivate::saveActivity(const QString &applicationName, const QString &activityName, const QVariantHash &activityMetadata) +{ + QVariantHash request(activityMetadata); + request.insert(ActivityApplicationKeyword,applicationName); + request.insert(ActivityActivityKeyword,activityName); + mClient.saveActivity(request); + +} + +void ActivityDatabasePrivate::deleteActivity(const QString &applicationName, const QString &activityName) +{ + QVariantHash request; + request.insert(ActivityApplicationKeyword,applicationName); + request.insert(ActivityActivityKeyword,activityName); + mClient.deleteActivity(request); +} + +void ActivityDatabasePrivate::deleteApplicationActivities(const QString &applicationName) +{ + QVariantHash request; + request.insert(ActivityApplicationKeyword,applicationName); + mClient.deleteApplicationActivities(request); +} + +QList ActivityDatabasePrivate::allActivitiesList() +{ + QList retVal; + mClient.activities(retVal); + return retVal; +} + +QList ActivityDatabasePrivate::applicationActivitiesList(const QString & applicationName) +{ + QList result; + QVariantHash request; + request.insert(ActivityApplicationKeyword,applicationName); + mClient.applicationActivities(result, request); + return result; +} + + +QString ActivityDatabasePrivate::requestedActivityName(const QString &applicationName) +{ + QString result; + QVariantHash request; + request.insert(ActivityApplicationKeyword,applicationName); + mClient.requestedActivityName(result, request); + return result; +} + +void ActivityDatabasePrivate::setActivityRequestFlag(const QString &applicationName, const QString &activityName) +{ + QVariantHash request; + request.insert(ActivityApplicationKeyword,applicationName); + request.insert(ActivityActivityKeyword,activityName); + mClient.setActivityRequestFlag(request); +} + +void ActivityDatabasePrivate::clearActivityRequestFlag(const QString &applicationName, const QString &activityName) +{ + QVariantHash request; + request.insert(ActivityApplicationKeyword,applicationName); + request.insert(ActivityActivityKeyword,activityName); + mClient.clearActivityRequestFlag(request); +} + diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/s60/activitydatabase_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/s60/activitydatabase_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYDATABASE_P_H +#define ACTIVITYDATABASE_P_H + +#include +#include +#include +class ActivityDatabasePrivate { + +public: + ActivityDatabasePrivate(); + ~ActivityDatabasePrivate(); + +public: + void saveActivity(const QString &applicationName, const QString &activityName, const QVariantHash &activityMetadata); + void deleteActivity(const QString &applicationName, const QString &activityName); + void deleteApplicationActivities(const QString &applicationName); + QList allActivitiesList(); + QList applicationActivitiesList(const QString &applicationName); + QString requestedActivityName(const QString &applicationName); + void setActivityRequestFlag(const QString &applicationName, const QString &activityName); + void clearActivityRequestFlag(const QString &applicationName, const QString &activityName); + +private: + HsActivityDbClient mClient; +}; + +#endif // ACTIVITYDATABASE_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/s60/activityserverclient_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/s60/activityserverclient_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "activityserverclient_p.h" + +ActivityServerClientPrivate::ActivityServerClientPrivate() +{ +} + +bool ActivityServerClientPrivate::addActivity(const QString &activityId, const QVariantHash ¶meters) +{ + return true; +} + +bool ActivityServerClientPrivate::removeActivity(const QString &activityId) +{ + return true; +} + +bool ActivityServerClientPrivate::updateActivity(const QString &activityId, const QVariantHash ¶meters) +{ + return true; +} + +QList ActivityServerClientPrivate::applicationActivities() +{ + return QList(); +} + +bool ActivityServerClientPrivate::removeActivity(int applicationId, const QString &activityId) +{ + return true; +} + +bool ActivityServerClientPrivate::removeApplicationActivities(int applicationId) +{ + return true; +} + +QList ActivityServerClientPrivate::activities() +{ + return QList(); +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/s60/activityserverclient_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/s60/activityserverclient_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYSERVERCLIENT_P_H +#define ACTIVITYSERVERCLIENT_P_H + +#include +#include + +class ActivityServerClient; + +class ActivityServerClientPrivate +{ + +public: + ActivityServerClientPrivate(); + +public: // API used by ActivityClient + bool addActivity(const QString &activityId, const QVariantHash ¶meters); + bool removeActivity(const QString &activityId); + bool updateActivity(const QString &activityId, const QVariantHash ¶meters); + QList applicationActivities(); + +public: // API used by ActivityManager + bool removeActivity(int applicationId, const QString &activityId); + bool removeApplicationActivities(int applicationId); + QList activities(); + +public: + ActivityServerClient* q_ptr; + +}; + +#endif // ACTIVITYSERVERCLIENT_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/s60/applicationlauncher_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/s60/applicationlauncher_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "applicationlauncher_p.h" + +#include +#include +#include +#include + +#include + +bool ApplicationLauncherPrivate::isRunning(int applicationId) +{ + TApaTaskList taskList(CEikonEnv::Static()->WsSession()); + TApaTask task = taskList.FindApp(TUid::Uid(applicationId)); + return task.Exists(); +} + +void ApplicationLauncherPrivate::startApplication(int applicationId, const QString &activityId) +{ + QString actId = "\""+activityId+"\""; + QString uri = QString("-activity appto://%1?activityname=%2").arg(uint(applicationId), 8, 16, QChar('0')).arg(actId); + + QT_TRAP_THROWING( + { + HBufC* uriAsDescriptor = XQConversions::qStringToS60Desc(uri); + CleanupStack::PushL(uriAsDescriptor); + + RApaLsSession apaLsSession; + User::LeaveIfError(apaLsSession.Connect()); + CleanupClosePushL(apaLsSession); + + TApaAppInfo appInfo; + TInt retVal = apaLsSession.GetAppInfo(appInfo, TUid::Uid(applicationId)); + + if(retVal == KErrNone) { + RProcess application; + User::LeaveIfError(application.Create(appInfo.iFullName, *uriAsDescriptor)); + application.Resume(); + } else { + // @todo + } + + CleanupStack::PopAndDestroy(&apaLsSession); + CleanupStack::PopAndDestroy(uriAsDescriptor); + } + ); +} + +void ApplicationLauncherPrivate::bringToForeground(int applicationId) +{ + TApaTaskList taskList(CEikonEnv::Static()->WsSession()); + TApaTask task = taskList.FindApp(TUid::Uid(applicationId)); + if (task.Exists()) { + task.BringToForeground(); + } else { + qCritical("Cannot bring to forward task %08x", applicationId); + } +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/s60/applicationlauncher_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/s60/applicationlauncher_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef APPLICATIONLAUNCHER_P_H +#define APPLICATIONLAUNCHER_P_H + +#include + +class ApplicationLauncherPrivate +{ + +public: + bool isRunning(int applicationId); + void startApplication(int applicationId, const QString &activityId); + void bringToForeground(int applicationId); + +}; + +#endif // APPLICATIONLAUNCHER_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/symbianinstaller/activityserviceinstaller/activityserviceinstaller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/symbianinstaller/activityserviceinstaller/activityserviceinstaller.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include + +QTM_USE_NAMESPACE + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + QServiceManager manager; + bool ok = manager.addService(":/activityserviceplugin.xml"); + if ( !ok ) + { + int err = manager.error(); + qFatal("%d ini", err); + } +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/symbianinstaller/activityserviceinstaller/activityserviceinstaller.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/symbianinstaller/activityserviceinstaller/activityserviceinstaller.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,31 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = app + +QT = core +#CONFIG += no_icon + +CONFIG += mobility +MOBILITY = serviceframework + +SOURCES += activityserviceinstaller.cpp + +RESOURCES += activityserviceinstaller.qrc + +symbian { + TARGET.CAPABILITY = ALL -TCB +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/symbianinstaller/activityserviceinstaller/activityserviceinstaller.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/symbianinstaller/activityserviceinstaller/activityserviceinstaller.qrc Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,5 @@ + + + ../../activityserviceplugin.xml + + diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/symbianinstaller/symbianinstaller.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/symbianinstaller/symbianinstaller.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,30 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = subdirs +SUBDIRS = activityserviceinstaller + +symbian { + load(data_caging_paths) + + plugin.sources = activityserviceplugin.dll + plugin.path = $$QT_PLUGINS_BASE_DIR + + installer.pkg_postrules += "\"$${EPOCROOT}epoc32/release/$(PLATFORM)/$(TARGET)/activityserviceinstaller.exe\" \ + - \"!:\sys\bin\activityserviceinstaller.exe\",FR,RB,RW" + + DEPLOYMENT += plugin installer +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/win/activitydatabase_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/win/activitydatabase_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "activitydatabase_p.h" + +#include +#include +#include +#include +#include + +#include + +const char KConnectionName[] = "ActivityDatabase"; + +ActivityDatabasePrivate::ActivityDatabasePrivate() +{ + // determine database localization + QSettings settings("nokia", "activities"); + if (!settings.contains("activitydatabase")) { + settings.setValue("activitydatabase", "C:\\activitydatabase.db"); + } + QString databaseFile = settings.value("activitydatabase").toString(); + + QSqlDatabase database; + if (QSqlDatabase::contains(KConnectionName)) { + database = QSqlDatabase::database(KConnectionName); + } else { + database = QSqlDatabase::addDatabase("QSQLITE", KConnectionName); + database.setDatabaseName(databaseFile); + if (!database.open()) { + qFatal(qPrintable(database.lastError().text())); + } + } + + if (!checkTables()) { + recreateTables(); + } +} + +ActivityDatabasePrivate::~ActivityDatabasePrivate() +{ + QSqlDatabase::database(KConnectionName).close(); +} + +void ActivityDatabasePrivate::saveActivity(const QString &applicationName, const QString &activityName, const QVariantHash &activityMetadata) +{ + if (applicationName.isEmpty() || activityName.isEmpty() || activityMetadata.value("screenshot").isNull()) { + qWarning("Activity entry is invalid, aborting save"); + return; + } + + QVariantHash activityData(activityMetadata); + activityData.insert(ActivityApplicationKeyword, applicationName); + activityData.insert(ActivityActivityKeyword, activityName); + + // stream whole entry to bytearray + QByteArray streamedData; + { + QDataStream stream(&streamedData, QIODevice::WriteOnly); + stream << activityData; + } + + QSqlDatabase database = QSqlDatabase::database(KConnectionName); + + if (!database.transaction()) { + qFatal(qPrintable(database.lastError().text())); + } + + // update or insert data + { + QSqlQuery query(database); + if (!query.exec(QString("SELECT ApplicationName FROM Activities WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName))) { + qFatal(qPrintable(query.lastError().text())); + } + + if (query.next()) { + if (!query.prepare("UPDATE Activities SET Data = :Data WHERE ApplicationName = :ApplicationName AND ActivityName = :ActivityName")) { + qFatal(qPrintable(query.lastError().text())); + } + query.bindValue(":Data", streamedData); + query.bindValue(":ApplicationName", applicationName); + query.bindValue(":ActivityName", activityName); + if (!query.exec()) { + qFatal(qPrintable(query.lastError().text())); + } + } else { + if (!query.prepare("INSERT INTO Activities(ApplicationName, ActivityName, Data) VALUES(:ApplicationName, :ActivityName, :Data)")) { + qFatal(qPrintable(query.lastError().text())); + } + query.bindValue(":ApplicationName", applicationName); + query.bindValue(":ActivityName", activityName); + query.bindValue(":Data", streamedData); + if (!query.exec()) { + qFatal(qPrintable(query.lastError().text())); + } + } + } + + if (!database.commit()) { + qFatal(qPrintable(database.lastError().text())); + } +} + +void ActivityDatabasePrivate::deleteActivity(const QString &applicationName, const QString &activityName) +{ + QString sqlCommand = QString("DELETE FROM Activities WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName); + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + if (!query.exec(sqlCommand)) { + qFatal(qPrintable(query.lastError().text())); + } +} + +void ActivityDatabasePrivate::deleteApplicationActivities(const QString &applicationName) +{ + QString sqlCommand = QString("DELETE FROM Activities WHERE ApplicationName = '%1'").arg(applicationName); + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + if (!query.exec(sqlCommand)) { + qFatal(qPrintable(query.lastError().text())); + } +} + +QList ActivityDatabasePrivate::allActivitiesList() +{ + return activitiesList("SELECT Data FROM Activities"); +} + +QList ActivityDatabasePrivate::applicationActivitiesList(const QString &applicationName) +{ + return activitiesList(QString("SELECT Data FROM Activities WHERE ApplicationName = '%1'").arg(applicationName)); +} + +QList ActivityDatabasePrivate::activitiesList(const QString& sqlCommand) +{ + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + if (!query.exec(sqlCommand)) { + qFatal(qPrintable(query.lastError().text())); + } + + QList result; + while (query.next()) { + QVariantHash activityEntry; + { + QByteArray data(query.value(0).toByteArray()); + QDataStream stream(&data, QIODevice::ReadOnly); + stream >> activityEntry; + } + result.append(activityEntry); + } + return result; +} + +QString ActivityDatabasePrivate::requestedActivityName(const QString &applicationName) +{ + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + if (!query.exec(QString("SELECT ActivityName FROM Activities WHERE ApplicationName = '%1' AND RequestFlag").arg(applicationName))) { + qFatal(qPrintable(query.lastError().text())); + } + + QString result; + if (query.next()) { + result = query.value(0).toString(); + } + return result; +} + +void ActivityDatabasePrivate::setActivityRequestFlag(const QString &applicationName, const QString &activityName) +{ + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + + // clear old requests for given application + if (!query.exec(QString("UPDATE Activities SET RequestFlag=0 WHERE ApplicationName = '%1'").arg(applicationName))) { + qFatal(qPrintable(query.lastError().text())); + } + + // set new request + if (!query.exec(QString("UPDATE Activities SET RequestFlag=1 WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName))) { + qFatal(qPrintable(query.lastError().text())); + } +} + +void ActivityDatabasePrivate::clearActivityRequestFlag(const QString &applicationName, const QString &activityName) +{ + QSqlQuery query(QSqlDatabase::database(KConnectionName)); + + // just clear the given request + if (!query.exec(QString("UPDATE Activities SET RequestFlag=0 WHERE ApplicationName = '%1' AND ActivityName = '%2'").arg(applicationName).arg(activityName))) { + qFatal(qPrintable(query.lastError().text())); + } +} + +bool ActivityDatabasePrivate::checkTables() +{ + QStringList expectedTables("Activities"); + QStringList actualTables = QSqlDatabase::database(KConnectionName).tables(); + return (expectedTables == actualTables); +} + +void ActivityDatabasePrivate::recreateTables() +{ + QSqlDatabase database = QSqlDatabase::database(KConnectionName); + + if (!database.transaction()) { + qFatal(qPrintable(database.lastError().text())); + } + + // drop any existing tables + { + QSqlQuery dropQuery(database); + foreach(const QString &tableName, database.tables()) { + if (!dropQuery.exec(QString("DROP TABLE %1").arg(tableName))) { + qFatal(qPrintable(dropQuery.lastError().text())); + } + } + } + + // create new table + { + QSqlQuery createQuery(database); + QString statement( + "CREATE TABLE Activities(" + "ApplicationName TEXT NOT NULL," + "ActivityName TEXT NOT NULL," + "RequestFlag BOOL NOT NULL DEFAULT FALSE," + "Data BLOB NOT NULL," + "PRIMARY KEY(ActivityName, ApplicationName))"); + + if (!createQuery.exec(statement)) { + qFatal(qPrintable(createQuery.lastError().text())); + } + } + + if (!database.commit()) { + qFatal(qPrintable(database.lastError().text())); + } +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/win/activitydatabase_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/win/activitydatabase_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef ACTIVITYDATABASE_P_H +#define ACTIVITYDATABASE_P_H + +#include +#include + +class ActivityDatabasePrivate { + +public: + ActivityDatabasePrivate(); + ~ActivityDatabasePrivate(); + +public: + void saveActivity(const QString &applicationName, const QString &activityName, const QVariantHash &activityMetadata); + void deleteActivity(const QString &applicationName, const QString &activityName); + void deleteApplicationActivities(const QString &applicationName); + QList allActivitiesList(); + QList applicationActivitiesList(const QString &applicationName); + QString requestedActivityName(const QString &applicationName); + void setActivityRequestFlag(const QString &applicationName, const QString &activityName); + void clearActivityRequestFlag(const QString &applicationName, const QString &activityName); + +private: + QList activitiesList(const QString& sqlCommand); + +private: + bool checkTables(); + void recreateTables(); + +}; + +#endif // ACTIVITYDATABASE_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/win/applicationlauncher_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/win/applicationlauncher_p.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "applicationlauncher_p.h" +#include + +bool ApplicationLauncherPrivate::isRunning(int applicationId) +{ + // @todo + return true; +} + +void ApplicationLauncherPrivate::startApplication(int applicationId, const QString &activityId) +{ + // @todo +} + +void ApplicationLauncherPrivate::bringToForeground(int applicationId) +{ + // @todo +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/activityserviceplugin/win/applicationlauncher_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/activityserviceplugin/win/applicationlauncher_p.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef APPLICATIONLAUNCHER_P_H +#define APPLICATIONLAUNCHER_P_H + +#include + +class ApplicationLauncherPrivate +{ + +public: + bool isRunning(int applicationId); + void startApplication(int applicationId, const QString &activityId); + void bringToForeground(int applicationId); + +}; + +#endif // APPLICATIONLAUNCHER_P_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,112 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include "hbactivityplugininterface.h" +#include "hbactivityplugin.h" + +#include + +QTM_USE_NAMESPACE + +HbActivityPlugin::HbActivityPlugin(QObject *parent) : HbActivityPluginInterface(parent), mActivityClient(0) +{ + QServiceManager serviceManager; + + if (serviceManager.findInterfaces("ActivityService").isEmpty()) { + // clean old entries + serviceManager.removeService("ActivityService"); + bool servicesAdded = serviceManager.addService(":/activityserviceplugin.xml"); + if (!servicesAdded) { + qWarning("addService for ActivityService returned false, error %d", serviceManager.error()); + } + } + + mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient"); + if (!mActivityClient) { + qWarning("Cannot initialize critical com.nokia.qt.activities.ActivityClient service."); + } + + connect(mActivityClient, SIGNAL(activityRequested(QString)), this, SIGNAL(activityRequested(QString))); +} + +HbActivityPlugin::~HbActivityPlugin() +{ + delete mActivityClient; +} + +bool HbActivityPlugin::addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + bool retVal(false); + QMetaObject::invokeMethod(mActivityClient, + "addActivity", + Q_RETURN_ARG(bool, retVal), + Q_ARG(QString, activityId), + Q_ARG(QVariant, data), + Q_ARG(QVariantHash, parameters)); + return retVal; +} + +bool HbActivityPlugin::removeActivity(const QString &activityId) +{ + bool retVal(false); + QMetaObject::invokeMethod(mActivityClient, + "removeActivity", + Q_RETURN_ARG(bool, retVal), + Q_ARG(QString, activityId)); + return retVal; +} + +bool HbActivityPlugin::updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) +{ + bool retVal(false); + QMetaObject::invokeMethod(mActivityClient, + "updateActivity", + Q_RETURN_ARG(bool, retVal), + Q_ARG(QString, activityId), + Q_ARG(QVariant, data), + Q_ARG(QVariantHash, parameters)); + return retVal; +} +QList HbActivityPlugin::activities() +{ + QList data; + QMetaObject::invokeMethod(mActivityClient, + "activities", + Q_RETURN_ARG(QList, data)); + return data; +} + +QVariant HbActivityPlugin::activityData(const QString &activityId) +{ + QVariant data; + QMetaObject::invokeMethod(mActivityClient, + "activityData", + Q_RETURN_ARG(QVariant, data), + Q_ARG(QString, activityId)); + return data; +} + +bool HbActivityPlugin::waitActivity() +{ + bool retVal(false); + QMetaObject::invokeMethod(mActivityClient, + "waitActivity", + Q_RETURN_ARG(bool, retVal)); + return retVal; +} + +Q_EXPORT_PLUGIN2(hbactivityplugin, HbActivityPlugin) diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HBACTIVITYPLUGIN_H +#define HBACTIVITYPLUGIN_H + +#include "hbactivityplugininterface.h" + +class HbActivityPlugin : public HbActivityPluginInterface +{ + Q_OBJECT + Q_INTERFACES(HbActivityPluginInterface) + +public: + HbActivityPlugin(QObject *parent = 0); + ~HbActivityPlugin(); + +public: + virtual bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + virtual bool removeActivity(const QString &activityId); + virtual bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters); + virtual QList activities(); + virtual QVariant activityData(const QString &activityId); + virtual bool waitActivity(); + +private: + QObject *mActivityClient; + +}; + +#endif //HBACTIVITYPLUGIN_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.pro Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,40 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +TEMPLATE = lib +TARGET = hbactivityplugin + +CONFIG += plugin + +CONFIG += mobility +MOBILITY = serviceframework + +HEADERS += hbactivityplugininterface.h \ + hbactivityplugin.h \ + +SOURCES += hbactivityplugin.cpp \ + +RESOURCES += hbactivityplugin.qrc + +symbian { + load(data_caging_paths) + pluginDep.sources = hbactivityplugin.dll + pluginDep.path = $$QT_PLUGINS_BASE_DIR + DEPLOYMENT += pluginDep + + TARGET.EPOCALLOWDLLDATA = 1 + TARGET.CAPABILITY = ALL -TCB +} diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.qrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/orbitintegration/hbactivityplugin/hbactivityplugin.qrc Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,5 @@ + + + ../../activityserviceplugin/activityserviceplugin.xml + + \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/orbitintegration/hbactivityplugin/hbactivityplugininterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/orbitintegration/hbactivityplugin/hbactivityplugininterface.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef HBACTIVITYPLUGININTERFACE_H +#define HBACTIVITYPLUGININTERFACE_H + +#include +#include +#include +#include +#include +#include + +class HbActivityPluginInterface : public QObject +{ + Q_OBJECT + +public: + HbActivityPluginInterface(QObject *parent = 0) : QObject(parent) {} + +public: + virtual bool addActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) = 0; + virtual bool removeActivity(const QString &activityId) = 0; + virtual bool updateActivity(const QString &activityId, const QVariant &data, const QVariantHash ¶meters) = 0; + virtual QList activities() = 0; + virtual QVariant activityData(const QString &activityId) = 0; + virtual bool waitActivity() = 0; + +signals: + void activityRequested(const QString &activityId); + +}; + +Q_DECLARE_INTERFACE(HbActivityPluginInterface, "HbActivityPluginInterface/1.0") + +#endif // HBACTIVITYPLUGININTERFACE_H diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/rom.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/rom.pri Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,20 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " +BLD_INF_RULES.prj_exports += "rom/activitymanager_core.iby CORE_APP_LAYER_IBY_EXPORT_PATH(activitymanager_core.iby)" +BLD_INF_RULES.prj_exports += "./sis/stubs/activitymanager_stub.sis /epoc32/release/winscw/udeb/z/system/install/activitymanager_stub.sis" +BLD_INF_RULES.prj_exports += "./sis/stubs/activitymanager_stub.sis /epoc32/data/z/system/install/activitymanager_stub.sis" \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/rom/activitymanager_core.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/rom/activitymanager_core.iby Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#ifndef __TSACTMAN_CORE_IBY__ +#define __TSACTMAN_CORE_IBY__ + +//file=ABI_DIR\BUILD_DIR\activityserviceinstaller.exe PROGRAMS_DIR\activityserviceinstaller.exe +file=ABI_DIR\BUILD_DIR\activityserviceplugin.dll SHARED_LIB_DIR\activityserviceplugin.dll +data=\epoc32\data\z\resource\qt\plugins\activityserviceplugin.qtplugin resource\qt\plugins\activityserviceplugin.qtplugin + +file=ABI_DIR\BUILD_DIR\activitylauncher.exe PROGRAMS_DIR\activitylauncher.exe +data=ZPRIVATE\10003a3f\import\apps\activitylauncher_reg.rsc private\10003a3f\import\apps\activitylauncher_reg.rsc +data=\epoc32\data\z\resource\apps\activitylauncher.rsc resource\apps\activitylauncher.rsc + +file=ABI_DIR\BUILD_DIR\hsactivitydbserver.exe PROGRAMS_DIR\hsactivitydbserver.exe +data=ZPRIVATE\10003a3f\import\apps\hsactivitydbserver_reg.rsc private\10003a3f\import\apps\hsactivitydbserver_reg.rsc +data=\epoc32\data\z\resource\apps\hsactivitydbserver.rsc resource\apps\hsactivitydbserver.rsc + +file=ABI_DIR\BUILD_DIR\hsactivitydbclient.dll SHARED_LIB_DIR\hsactivitydbclient.dll + +file=ABI_DIR\BUILD_DIR\hbactivityplugin.dll SHARED_LIB_DIR\hbactivityplugin.dll +data=\epoc32\data\z\resource\qt\plugins\hbactivityplugin.qtplugin resource\qt\plugins\hbactivityplugin.qtplugin + + +// stub sis +data=ZSYSTEM/install/activitymanager_stub.sis system/install/activitymanager_stub.sis + +#endif //__TSACTMAN_CORE_IBY__ diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/sis/activitymanager.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/sis/activitymanager.pkg Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,45 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; + +;Language - standard language definitions +&EN + +; standard SIS file header +#{"activitymanager"},(0x200267B4),1,0,0,TYPE=SA, RU + +;Localized Vendor Name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + + +;"/epoc32/release/armv5/urel/activityserviceinstaller.exe" - "!:\sys\bin\activityserviceinstaller.exe" +"/epoc32/release/armv5/urel/activityserviceplugin.dll"-"!:\sys\bin\activityserviceplugin.dll" +"/epoc32/data/z/resource/qt/plugins/activityserviceplugin.qtplugin"-"!:\resource\qt\plugins\activityserviceplugin.qtplugin" + +"/epoc32/release/armv5/urel/activitylauncher.exe" - "!:\sys\bin\activitylauncher.exe" +"/epoc32/data/z/resource/apps/activitylauncher.rsc" - "!:\resource\apps\activitylauncher.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/activitylauncher_reg.rsc" - "!:\private\10003a3f\import\apps\activitylauncher_reg.rsc" + +"/epoc32/release/armv5/urel/hsactivitydbserver.exe" - "!:\sys\bin\hsactivitydbserver.exe" +"/epoc32/data/z/resource/apps/hsactivitydbserver.rsc" - "!:\resource\apps\hsactivitydbserver.rsc" +"/epoc32/data/z/private/10003a3f/import/apps/hsactivitydbserver_reg.rsc" - "!:\private\10003a3f\import\apps\hsactivitydbserver_reg.rsc" + +"/epoc32/release/armv5/urel/hsactivitydbclient.dll" - "!:\sys\bin\hsactivitydbclient.dll" + +"/epoc32/release/armv5/urel/hbactivityplugin.dll" - "!:\sys\bin\hbactivityplugin.dll" +"/epoc32/data/z/resource/qt/plugins/hbactivityplugin.qtplugin"-"!:\resource\qt\plugins\hbactivityplugin.qtplugin" diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/sis/edit_pkg.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/sis/edit_pkg.pl Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,224 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +#Options: +# -version -adds Qt version (4,6,0) intp pkg files +# -target -replaces $(PLATFORM)/$(TARGET) into armv5/urel +# -test -creates script for test app +# default -version + +use strict; +use File::Find; +my $base = `cd`; +$base =~ s/\\\w+\s+$//; #move one dir upper +my $modulebase = `cd`; +$modulebase =~s/(\s+)$//; #remove linefeed from end +print $base;; +my $qtversion = "\, 4\, 6\, 0\,"; +my $target = "armv5\/urel"; + +my $qtversionchnage = 0; +my $qtversionarg = "-version"; +my $targetchnage = 0; +my $targetarg = "-target"; +my $module = 0; +my $modulearg = "-test"; +my $delmodule = 0; +my $delmodulearg = "-delmodule"; +my $moduledir = "testsis"; +my $modulepath = $base."\\".$moduledir; +my $ccert = $modulebase."\\"."cert.cer"; +my $ckey = $modulebase."\\"."key.pem"; +my $modulebatpath = $modulebase."\\".$moduledir."\\createmodulesis.bat"; + +checkCmdLine(); + +if ( $qtversionchnage == 1 || $targetchnage == 1 ) + { + find( \&edits, $base ); + } +if ( $module == 1 ) + { + system "mkdir $moduledir"; + if ( not ( open (FWM, ">$modulebatpath") ) ) + { + print "\n***Error: Couldn't open $modulebatpath file to write\n"; + return; + } + binmode FWM; + print FWM "del /S/Q *.SIS\r\n"; + print FWM "del /S/Q *.SISX\r\n"; + close FWM; + find( \&moduleSis, $base ); + } +if ( $delmodule == 1 ) + { + find( \&delModuleSis, $base ); + } + +sub edits() + { + my $file=$_; + my $winpath=$File::Find::name; + $winpath=~s/\//\\/g; + if( -f $file && $file=~/(_template\.pkg)$/i ) + { + print "$winpath "; + system "attrib -R $winpath"; + if ( not ( open (FR, $winpath) ) ) + { + print "Error: Couldn't open $winpath file to read\n"; + return; + } + binmode FR; + my $buf=""; + my $length = 0; + $length = -s $winpath; + read( FR, $buf, $length ); + close FR; + if ( $qtversionchnage == 1 ) + { + $buf =~s/\,\s*\,\s*\,\s*\,\s*\{\"Qt\"\}/$qtversion \{\"Qt\"\}/si; + } + if ( $targetchnage == 1 ) + { + $buf =~s/\$\(PLATFORM\)\/\$\(TARGET\)/$target/si; + } + + if ( not ( open (FW, ">$winpath") ) ) + { + print "\n***Error: Couldn't open $winpath file to write\n"; + return; + } + binmode FW; + print FW $buf; + close FW; + + print "\r\n"; + } + } + +sub checkCmdLine() + { + my $numArgs = $#ARGV + 1; + if ( $numArgs == 0 ) + { + $qtversionchnage = 1; + } + else + { + foreach my $argnum ( 0 .. $#ARGV ) + { + my $argName = lc $ARGV[$argnum]; + if ( $argName eq $qtversionarg ) + { + $qtversionchnage = 1; + } + elsif ( $argName eq $targetarg ) + { + $targetchnage = 1; + } + elsif ( $argName eq $modulearg ) + { + $module = 1; + } + elsif ( $argName eq $delmodulearg ) + { + $delmodule = 1; + } + else + { + die "\n***Error: Bad arguments\n"; + } + } + } + } + +sub moduleSis() + { + my $file=$_; + my $winpath=$File::Find::name; + $winpath=~s/\//\\/g; + + + if( -f $file && $file=~/(.*test.*_template\.pkg)$/i ) + { + print "$winpath "; + system "attrib -R $winpath"; + if ( not ( open (FR, $winpath) ) ) + { + print "Error: Couldn't open $winpath file to read\n"; + return; + } + binmode FR; + my $buf=""; + my $length = 0; + $length = -s $winpath; + read( FR, $buf, $length ); + close FR; + $buf =~s/\,\s*\,\s*\,\s*\,\s*\{\"Qt\"\}/$qtversion \{\"Qt\"\}/si; + $buf =~s/\$\(PLATFORM\)\/\$\(TARGET\)/$target/si; + + if ( not ( open (FW, ">$winpath") ) ) + { + print "Error: Couldn't open $winpath file to write\n"; + return; + } + binmode FW; + print FW $buf; + close FW; + print "\r\n"; + + my $pkgname = sisName( $winpath ); + + if ( not ( open (FWM2, ">>$modulebatpath") ) ) + { + print "Error: Couldn't open $modulebatpath file to append\n"; + return; + } + binmode FWM2; + print FWM2 "makesis $winpath $pkgname\.SIS\r\n"; + print FWM2 "signsis $pkgname\.SIS $pkgname\.SISX $ccert $ckey\r\n"; + close FWM2; + } + } + +sub sisName() + { + my $path = shift; + my $name = ""; + if ( $path =~ /\\(\w+)\.pkg/i ) + { + $name = $1; + } + return $name; + } + +sub delModuleSis() + { + my $file=$_; + my $winpath=$File::Find::name; + $winpath=~s/\//\\/g; + + + if( -f $file && $file=~/(_template\.pkg)$/i && ( $file=~/^(t_)/i || $file=~/test/i ) ) + { + print "Deleting: "; + print "$winpath "; + system "attrib -R $winpath"; + system "del /S/Q $winpath"; + print "\r\n"; + } + } \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/sis/stubs/activitymanager_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/sis/stubs/activitymanager_stub.pkg Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,50 @@ +; +; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +; All rights reserved. +; This component and the accompanying materials are made available +; under the terms of "Eclipse Public License v1.0" +; which accompanies this distribution, and is available +; at the URL "http://www.eclipse.org/legal/epl-v10.html". +; +; Initial Contributors: +; Nokia Corporation - initial contribution. +; +; Contributors: +; +; Description: +; +; ------------------------------------------------------------------------------ +; Taskswitcher stub SIS package file. +; Used to enable Taskswitcher to be updated from ROM with a SIS package. +; When you add new files into this stub, please remember to update +; SIS stub with "makesis -s" command. +; ------------------------------------------------------------------------------ +; +;Language - standard language definitions +&EN + +; standard SIS file header +#{"activitymanager"},(0x200267B4),1,0,0,TYPE=SA + +;Localized Vendor Name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + +;"" - "Z:\sys\bin\activityserviceinstaller.exe" +"" - "Z:\sys\bin\activityserviceplugin.dll" +"" - "Z:\resource\qt\plugins\activityserviceplugin.qtplugin" + +"" - "Z:\sys\bin\activitylauncher.exe" +"" - "Z:\resource\apps\activitylauncher.rsc" +"" - "Z:\private\10003a3f\import\apps\activitylauncher_reg.rsc" + +"" - "Z:\sys\bin\hsactivitydbserver.exe" +"" - "Z:\resource\apps\hsactivitydbserver.rsc" +"" - "Z:\private\10003a3f\import\apps\hsactivitydbserver_reg.rsc" + +"" - "Z:\sys\bin\hsactivitydbclient.dll" + +"" - "Z:\sys\bin\hbactivityplugin.dll" +"" - "Z:\resource\qt\plugins\hbactivityplugin.qtplugin" \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/sis/stubs/activitymanager_stub.sis Binary file activitymanager/sis/stubs/activitymanager_stub.sis has changed diff -r 7f0462e8c3da -r 1e87eb3b400f activitymanager/sis/stubs/createstubs.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/activitymanager/sis/stubs/createstubs.bat Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,17 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +for %%f in (*.pkg) do makesis -s %%f diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/caclient.pro --- a/contentstorage/caclient/caclient.pro Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/caclient.pro Wed Mar 24 03:15:43 2010 +0200 @@ -51,7 +51,8 @@ -laknicon \ -lcharconv \ -lfbscli \ - -lbitgdi + -lbitgdi \ + -lxqutils include(caclient_s60.pri) include(cahandler.pri) } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/inc/caclient_defines.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/inc/caclient_defines.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: caclient_defines.h + * + */ + +const char APPLICATION_UID_ATTRIBUTE_NAME[] = "application:uid"; +const char APPLICATION_ENTRY_TYPE_NAME[] = "application"; +const char WIDGET_ENTRY_TYPE_NAME[] = "widget"; +const char URL_ENTRY_TYPE_NAME[] = "url"; +const char TEMPLATED_APPLICATION_ENTRY_TYPE_NAME[] = "templatedApplication"; \ No newline at end of file diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/inc/caitemmodellist.h --- a/contentstorage/caclient/inc/caitemmodellist.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/inc/caitemmodellist.h Wed Mar 24 03:15:43 2010 +0200 @@ -49,6 +49,7 @@ void insert(int row, int id); void remove(int id); const int &operator[](int row) const; + QList orderedIdList(); private: diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/installs_win32.pri --- a/contentstorage/caclient/installs_win32.pri Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/installs_win32.pri Wed Mar 24 03:15:43 2010 +0200 @@ -16,7 +16,7 @@ # take path from common.pri cadb.path = $$DESTDIR -cadb.files = ./../castorage/data/castoragedb +cadb.files = ./../castorage/data/castorage.db cadb.CONFIG += no_build INSTALLS += cadb diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/s60/inc/caobjectadapter.h --- a/contentstorage/caclient/s60/inc/caobjectadapter.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/s60/inc/caobjectadapter.h Wed Mar 24 03:15:43 2010 +0200 @@ -38,6 +38,7 @@ class HbIcon; class CFbsBitmap; + /** * CaObjectAdapter * @@ -75,22 +76,6 @@ CCaInnerQuery &toQuery); /** - * Wraps a QString internal buffer into TPtrC object. - * The returned object is valid until QString internal buffer changes - * or the object is destroyed. - * @param string QString. - * @return descriptor. - */ - static const TPtrC convertToDescriptor(const QString &string); - - /** - * Converts descriptor to QString. - * @param des descriptor. - * @return QString. - */ - static QString convertToString(const TDesC &des); - - /** * Converts inner entry table to QList of pointers to entries. * @param fromEntriesArray an array containing inner entries * for conversion. @@ -156,31 +141,6 @@ CCaInnerNotifierFilter &to); /** - * @return uid attribute name - */ - static const QString applicationUidAttributeName(); - - /** - * @return application entry type name - */ - static const QString applicationEntryTypeName(); - - /** - * @return widget entry type name - */ - static const QString widgetEntryTypeName(); - - /** - * @return url entry type name - */ - static const QString urlEntryTypeName(); - - /** - * @return template application entry type name - */ - static const QString templateApplicationEntryTypeName(); - - /** * Set entry id. * @param entry entry. * @param id entry id. diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/s60/src/caobjectadapter.cpp --- a/contentstorage/caclient/s60/src/caobjectadapter.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/s60/src/caobjectadapter.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -26,6 +26,7 @@ #include #include #include +#include #include "cadef.h" #include "caobjectadapter.h" @@ -36,6 +37,7 @@ #include "camenuiconutility.h" #include "canotifierfilter.h" #include "cainnernotifierfilter.h" +#include "caclient_defines.h" static QImage::Format TDisplayMode2Format(TDisplayMode mode) { @@ -81,28 +83,34 @@ TDisplayMode displayMode = aBitmap->DisplayMode(); // QImage format must match to bitmap format - QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format(displayMode)); + QImage image(data, size.iWidth, size.iHeight, TDisplayMode2Format( + displayMode)); aBitmap->EndDataAccess(); - // No data copying happens because image format matches native OpenVG format. + // No data copying happens because + // image format matches native OpenVG format. // So QPixmap actually points to CFbsBitmap data. return QPixmap::fromImage(image); } -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- // -// ----------------------------------------------------------------------------- +// --------------------------------------------------------------------------- void CaObjectAdapter::convertL(const CaEntry &fromEntry, CCaInnerEntry &toEntry) { toEntry.SetId(fromEntry.id()); - toEntry.SetTextL(convertToDescriptor(fromEntry.text())); + toEntry.SetTextL( + XQConversions::qStringToS60Desc(fromEntry.text())->Des()); - toEntry.SetDescriptionL(convertToDescriptor(fromEntry.description())); + toEntry.SetDescriptionL( + XQConversions::qStringToS60Desc(fromEntry.description())->Des()); + toEntry.SetDescriptionL( + XQConversions::qStringToS60Desc(fromEntry.description())->Des()); toEntry.SetEntryTypeNameL( - convertToDescriptor(fromEntry.entryTypeName())); + XQConversions::qStringToS60Desc(fromEntry.entryTypeName())->Des()); toEntry.SetFlags(static_cast(fromEntry.flags())); @@ -112,21 +120,24 @@ fromEntry.iconDescription(); toEntry.SetIconDataL( - convertToDescriptor(fromIconDescription.filename()), - convertToDescriptor(fromIconDescription.skinId()), - convertToDescriptor(fromIconDescription.applicationId()) - ); + XQConversions::qStringToS60Desc( + fromIconDescription.filename())->Des(), + XQConversions::qStringToS60Desc( + fromIconDescription.skinId())->Des(), + XQConversions::qStringToS60Desc( + fromIconDescription.applicationId())->Des()); const QMap attributesMap = fromEntry.attributes(); foreach(QString key, attributesMap.keys()) { - if (key == applicationUidAttributeName()) { + if (key == APPLICATION_UID_ATTRIBUTE_NAME) { const TInt32 uid = attributesMap.value(key).toInt(); toEntry.SetUid(uid); } else { toEntry.AddAttributeL( - convertToDescriptor(key), - convertToDescriptor(attributesMap.value(key))); + XQConversions::qStringToS60Desc(key)->Des(), + XQConversions::qStringToS60Desc( + attributesMap.value(key))->Des()); } } } @@ -154,7 +165,7 @@ CleanupStack::PushL(sourceList); foreach(const QString str, list) { - sourceList->AppendL(convertToDescriptor(str)); + sourceList->AppendL(XQConversions::qStringToS60Desc(str)->Des()); } toQuery.SetEntryTypeNames(sourceList); @@ -166,28 +177,31 @@ Qt::SortOrder sortOrder; fromQuery.getSort(sortAttr, sortOrder); toQuery.SetSort(CaObjectAdapter::getSortCode(sortAttr, sortOrder)); - + const QMap attributesMap = fromQuery.attributes(); foreach(QString key, attributesMap.keys()) { - toQuery.AddAttributeL( - convertToDescriptor(key), - convertToDescriptor(attributesMap.value(key))); + toQuery.AddAttributeL( + XQConversions::qStringToS60Desc(key)->Des(), + XQConversions::qStringToS60Desc( + attributesMap.value(key))->Des()); } } //---------------------------------------------------------------------------- // //---------------------------------------------------------------------------- -void CaObjectAdapter::convert(const CCaInnerEntry &fromEntry, - CaEntry &toEntry) +void CaObjectAdapter::convert( + const CCaInnerEntry &fromEntry, CaEntry &toEntry) { toEntry.setId(fromEntry.GetId()); - toEntry.setText(convertToString(fromEntry.GetText())); + toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText())); - toEntry.setDescription(convertToString(fromEntry.GetDescription())); - toEntry.setEntryTypeName(convertToString(fromEntry.GetEntryTypeName())); + toEntry.setDescription( + XQConversions::s60DescToQString(fromEntry.GetDescription())); + toEntry.setEntryTypeName( + XQConversions::s60DescToQString(fromEntry.GetEntryTypeName())); toEntry.setFlags(static_cast(fromEntry.GetFlags())); @@ -196,48 +210,34 @@ CaIconDescription iconDescription; iconDescription.setId(icon.iId); - iconDescription.setFilename(convertToString(icon.iFileName)); - iconDescription.setSkinId(convertToString(icon.iSkinId)); - iconDescription.setApplicationId(convertToString(icon.iApplicationId)); + iconDescription.setFilename( + XQConversions::s60DescToQString(icon.iFileName)); + iconDescription.setSkinId( + XQConversions::s60DescToQString(icon.iSkinId)); + iconDescription.setApplicationId( + XQConversions::s60DescToQString(icon.iApplicationId)); toEntry.setIconDescription(iconDescription); const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes(); - if (toEntry.entryTypeName() == applicationEntryTypeName() - || toEntry.entryTypeName() == widgetEntryTypeName()) { - toEntry.setAttribute(applicationUidAttributeName(), - QString::number(fromEntry.GetUid())); + if (toEntry.entryTypeName() == APPLICATION_ENTRY_TYPE_NAME + || toEntry.entryTypeName() == WIDGET_ENTRY_TYPE_NAME) { + toEntry.setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(fromEntry.GetUid())); } const int attributesArrayCount = attributesArray.Count(); for (int i = 0; i < attributesArrayCount; ++i) { const CCaEntryAttribute *const attribute = attributesArray[i]; - toEntry.setAttribute(convertToString(attribute->Name()), - convertToString(attribute->Value())); + toEntry.setAttribute( + XQConversions::s60DescToQString(attribute->Name()), + XQConversions::s60DescToQString(attribute->Value())); } } //---------------------------------------------------------------------------- -// !!! Warning: returns wrapper to internal QString representation which may -// get invalid before returned TPtrC object gets out of scope -//---------------------------------------------------------------------------- -const TPtrC CaObjectAdapter::convertToDescriptor(const QString &string) -{ - const TPtrC result(reinterpret_cast(string.utf16())); - return result; -} - -//---------------------------------------------------------------------------- -// -//---------------------------------------------------------------------------- -QString CaObjectAdapter::convertToString(const TDesC &des) -{ - return QString::fromUtf16(des.Ptr(), des.Length()); -} - -//---------------------------------------------------------------------------- // //---------------------------------------------------------------------------- void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter, @@ -270,13 +270,12 @@ const QStringList stringList = notifierFilter.getTypeNames(); foreach(QString str, stringList) { - typeNames->AppendL(convertToDescriptor(str)); + typeNames->AppendL(XQConversions::qStringToS60Desc(str)->Des()); } source.SetTypeNames(typeNames); CleanupStack::Pop(typeNames); - } //---------------------------------------------------------------------------- // @@ -358,50 +357,7 @@ return error; } -//---------------------------------------------------------------------------- -// -//---------------------------------------------------------------------------- -const QString CaObjectAdapter::applicationUidAttributeName() -{ - const static QString name("application:uid"); - return name; -} -//---------------------------------------------------------------------------- -// -//---------------------------------------------------------------------------- -const QString CaObjectAdapter::applicationEntryTypeName() -{ - const static QString name("application"); - return name; -} - -//---------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -const QString CaObjectAdapter::widgetEntryTypeName() -{ - const static QString name("widget"); - return name; -} - -//---------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -const QString CaObjectAdapter::urlEntryTypeName() -{ - const static QString name("url"); - return name; -} - -//---------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -const QString CaObjectAdapter::templateApplicationEntryTypeName() -{ - const static QString name("templatedApplication"); - return name; -} // ----------------------------------------------------------------------------- // copying compressed bitmap //---------------------------------------------------------------------------- @@ -434,9 +390,21 @@ if (icon.isNull() || !(icon.size().isValid())) { QString filename(entry.iconDescription().filename()); if (!filename.isEmpty()) { - icon = HbIcon(filename); + + // TODO: + // work-around for HbIcon::size() method locking files if returns + // default size, error id: ou1cimx1#279208 Case: mcl06HsDo07 - + // "Cannot delete file" when trying to uninstall sisx file + + if (entry.entryTypeName() == XQConversions::s60DescToQString(KCaTypeWidget)) { + icon = QIcon(filename); + qWarning("Widget icon created by QIcon, as work-around for HbIcon::size"); + } else { + icon = HbIcon(filename); + } } - } + } + //try to load symbian icon from multi-bitmap (mbm, mbg) if (icon.isNull() || !(icon.size().isValid())) { CCaInnerEntry *innerEntry = CCaInnerEntry::NewLC(); @@ -449,13 +417,13 @@ //need to disable compression to properly convert the bitmap AknIconUtils::DisableCompression(aknIcon->Bitmap()); - AknIconUtils::SetSize(aknIcon->Bitmap(), TSize(size.width(), - size.height()), EAspectRatioPreservedAndUnusedSpaceRemoved); + AknIconUtils::SetSize( + aknIcon->Bitmap(), TSize(size.width(), size.height()), + EAspectRatioPreservedAndUnusedSpaceRemoved); if (aknIcon->Bitmap()->Header().iCompression == ENoBitmapCompression) { pixmap = fromSymbianCFbsBitmap(aknIcon->Bitmap()); - QPixmap mask = fromSymbianCFbsBitmap( - aknIcon->Mask()); + QPixmap mask = fromSymbianCFbsBitmap(aknIcon->Mask()); pixmap.setAlphaChannel(mask); } else { // we need special handling for icons in 9.2 (NGA) // let's hope that in future it will be in QT code diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/s60/src/caqtsfhandlerloader.cpp --- a/contentstorage/caclient/s60/src/caqtsfhandlerloader.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/s60/src/caqtsfhandlerloader.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -24,7 +24,7 @@ #include "cahandler.h" #include "caqtsfhandlerloader.h" -#include "caobjectadapter.h" +#include "caclient_defines.h" #include "caapphandler.h" #include "caurlhandler.h" #include "catapphandler.h" @@ -59,13 +59,12 @@ CaHandler *implementation(0); - if (entryTypeName == CaObjectAdapter::applicationEntryTypeName() - || entryTypeName == CaObjectAdapter::widgetEntryTypeName()) { + if (entryTypeName == APPLICATION_ENTRY_TYPE_NAME + || entryTypeName == WIDGET_ENTRY_TYPE_NAME) { implementation = new CaS60HandlerAdapter; - } else if (entryTypeName == CaObjectAdapter::urlEntryTypeName()) { + } else if (entryTypeName == URL_ENTRY_TYPE_NAME) { implementation = new CaS60HandlerAdapter; - } else if (entryTypeName == - CaObjectAdapter::templateApplicationEntryTypeName()) { + } else if (entryTypeName == TEMPLATED_APPLICATION_ENTRY_TYPE_NAME) { implementation = new CaTappHandler; } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/src/caitemmodel.cpp --- a/contentstorage/caclient/src/caitemmodel.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/src/caitemmodel.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -706,17 +706,19 @@ mEntries.updateEntry(id); QList ids = mService->getEntryIds(mQuery); - if (mEntries.indexOf(id) >= 0 && ids.indexOf(id) - == mEntries.indexOf(id)) { + if (mEntries.indexOf(id) >= 0 + && ids.indexOf(id) == mEntries.indexOf(id)) { emit m_q->dataChanged(index(mEntries.indexOf(id)), index( mEntries.indexOf(id))); + } else if (ids.indexOf(id) < 0){ + removeItem(id); + } else if (mEntries.indexOf(id) < 0){ + addItem(id); + } else if (mParentEntry && id == mParentEntry->id()) { + updateParentEntry(); + m_q->reset(); } else { - if (mParentEntry && id == mParentEntry->id()) { - updateParentEntry(); - m_q->reset(); - } else { - updateLayout(); - } + updateModel(); } CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateItemData"); } @@ -751,11 +753,25 @@ int entriesCount = mEntries.count(); if (entriesCount) { int lastRow = itemsList.indexOf(mEntries[entriesCount - 1]); - if (itemsList.count() == entriesCount && lastRow == (entriesCount - - 1)) { + if (itemsList.count() == entriesCount) { //count is same and last item is in same position //so we update whole model - updateModel(); + bool orderChanged(false); + while (entriesCount) { + if (itemsList.indexOf(mEntries[entriesCount - 1]) + != (entriesCount - 1)) { + orderChanged = true; + break; + } + entriesCount--; + } + if (orderChanged) { + updateLayout(); + } + else { + updateModel(); + } + } else if ((itemsList.count() - entriesCount) == 1 && lastRow == entriesCount) { //just one item added - collection @@ -773,15 +789,15 @@ i++; } } else { - //some items were inserted or reordered, - //so we update layout and emit signal with row number + //some items were inserted + //so we update model and emit signal with row number //of first moved/added item //signal is needed to scroll a view to proper position after //some items were added - updateLayout(); + updateModel(); emit m_q->scrollTo(lastRow + 1, QAbstractItemView::PositionAtTop); - } + } } else { updateModel(); } @@ -815,9 +831,8 @@ mEntries.remove(id); m_q->endRemoveRows(); } else { - updateLayout(); + updateModel(); } - CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::removeItem"); } @@ -843,13 +858,45 @@ /*! Layout update + NOTE: this method should be called only if the entries get rearranged + and do not change their contents! */ void CaItemModelPrivate::updateLayout() { CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateLayout"); m_q->layoutAboutToBeChanged(); + + // get the ID list from before the update + QList oldOrderedIdList = mEntries.orderedIdList(); + + // do the update, the entries should only get rearranged mEntries.updateEntries(mQuery); - updateParentEntry(); + + // get the new ID list after the entries got rearranged + QList newOrderedIdList = mEntries.orderedIdList(); + // this list will contain the new position indices + QList newPositionsList; + int entry; + foreach (entry, oldOrderedIdList) { + newPositionsList << newOrderedIdList.indexOf(entry); + } + + // now check which items in the previous persistent index list changed + // their positions, make new indices for them and store in the new + // persistent index list + QModelIndexList oldPersistentIndexList = m_q->persistentIndexList(); + QModelIndexList newPersistentIndexList; + QModelIndex index; + foreach (index, oldPersistentIndexList) { + newPersistentIndexList << + m_q->createIndex( + newPositionsList.at(index.row()), + 0, + index.internalPointer()); + } + + m_q->changePersistentIndexList(oldPersistentIndexList, newPersistentIndexList); + m_q->layoutChanged(); CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateLayout"); } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/src/caitemmodellist.cpp --- a/contentstorage/caclient/src/caitemmodellist.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/src/caitemmodellist.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -170,3 +170,12 @@ { return mOrderedList[row]; } + +/*! + Returns on ordered list of entry IDs + \retval Copy of the internal ID list + */ +QList CaItemModelList::orderedIdList() +{ + return mOrderedList; +} diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/caclient/stub/src/caclientproxy.cpp --- a/contentstorage/caclient/stub/src/caclientproxy.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/caclient/stub/src/caclientproxy.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -36,7 +36,7 @@ const char *DATABASE_CONNECTION_NAME = "CaService"; const char *DATABASE_TYPE = "QSQLITE"; -const char *DATABASE_NAME = "castoragedb"; +const char *DATABASE_NAME = "castorage.db"; static QSqlDatabase dbConnection() { @@ -605,7 +605,6 @@ whereStatement.append(" AND ").append(QString().setNum( query.entryRoles())) .append(" | EN_ROLE == ").append( QString().setNum(query.entryRoles())); - //TODO: by uid??? if (query.entryTypeNames().count()) { whereStatement.append(" AND EN_TYPE_NAME IN ("); @@ -617,11 +616,48 @@ whereStatement.append(") "); } + QString whereAttributes; + if (query.attributes().count()) { + QMap attributes = query.attributes(); + QMapIterator atrIt(attributes); + int j = 1; + while (atrIt.hasNext()) { + atrIt.next(); + + // at1.AT_NAME = 'Attribute_Name_1' AND at1.AT_VALUE = 'Attribute_VALUE_1' + whereAttributes.append(" AND ").append( + " at").append(QString().setNum(j)).append(".AT_NAME = \'").append( + atrIt.key()).append("\' ").append( + " AND ").append( + " at").append(QString().setNum(j)).append(".AT_VALUE = \'").append( + atrIt.value()).append("\' "); + + j++; + } + whereStatement.append(whereAttributes); + + } + + whereStatement.append(" GROUP BY ENTRY_ID "); + + QString leftJoins; + if (query.attributes().count()) { + for (int j=1; j<=query.attributes().count(); j++) { + // LEFT JOIN CA_ATTRIBUTE as at1 ON ENTRY_ID = at1.AT_ENTRY_ID + leftJoins.append( + " LEFT JOIN CA_ATTRIBUTE as at").append(QString().setNum(j)).append( + " ON ENTRY_ID = at").append(QString().setNum(j)).append(" .AT_ENTRY_ID "); + } + } + QSqlQuery sqlquery(db); if (query.parentId() == 0) { // sort - QString queryString("SELECT ENTRY_ID from CA_ENTRY where 1=1 "); + QString queryString("SELECT ENTRY_ID from CA_ENTRY "); + queryString.append(leftJoins); + queryString.append(" where 1=1 "); queryString.append(whereStatement); + modifyQueryForSortOrder(queryString, query, false); if (query.count() > 0) queryString.append(" LIMIT ").append(query.count()); @@ -636,11 +672,13 @@ } } } else { - QString - queryString( - "SELECT ENTRY_ID FROM CA_ENTRY \ - LEFT JOIN CA_GROUP_ENTRY ON GE_ENTRY_ID = ENTRY_ID WHERE GE_GROUP_ID = ? "); - queryString.append(whereStatement); + + QString queryString("SELECT ENTRY_ID FROM CA_ENTRY "); + QString queryString2(" LEFT JOIN CA_GROUP_ENTRY ON GE_ENTRY_ID = ENTRY_ID WHERE GE_GROUP_ID = ? "); + queryString2.append(whereStatement); + queryString.append(leftJoins); + queryString.append(queryString2); + modifyQueryForSortOrder(queryString, query, true); if (query.count() > 0) queryString.append(" LIMIT ").append(query.count()); @@ -752,9 +790,9 @@ return error; } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- void CaClientProxy::modifyQueryForSortOrder(QString &queryString, const CaQuery &query, bool parent) const { @@ -802,9 +840,9 @@ } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- bool CaClientProxy::setIconInDb(CaEntry *entryClone) const { //set icon information into db @@ -848,9 +886,9 @@ return success; } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- bool CaClientProxy::setEntryInDb(CaEntry *entryClone) const { QSqlQuery query(dbConnection()); @@ -902,9 +940,9 @@ return success; } -/*! - //TODO: - */ +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- bool CaClientProxy::setAttributesInDb(CaEntry *entryClone) const { bool success = true; diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/cahandler/app/inc/catasklist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/inc/catasklist.h Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: ?Description + * + */ + +#ifndef CATASKLIST_H +#define CATASKLIST_H + +// INCLUDES + +#include +#include + +// CLASS DECLARATION + +/** +* Class for finding out about running applications. +* +* This is a modification of the original CAknTaskList class, which +* differs in that it does not discriminate applications based on their +* window group priority. +*/ +class CCaTaskList : public CBase + { +public: + + /** + * Factory function + * @param aWsSession an open session to the window server, often from CEikonEnv::WsSession() + * @return a new fully constructed instance of CCaTaskList + */ + static CCaTaskList* NewL( RWsSession& aWsSession ); + + /** + * Factory function + * @param aWsSession an open session to the window server, often from CEikonEnv::WsSession() + * @return a new fully constructed instance of CCaTaskList, which is on the cleanup stack + */ + + static CCaTaskList* NewLC( RWsSession& aWsSession ); + /** + * Destructor. + */ + ~CCaTaskList(); + + /** + * Refresh the window group array + */ + void UpdateListL(); + + /** + * Accessor for the window group array + * @return an array containing the window groups of running applications. + */ + const RArray& WgArray() const; + + /** + * Find an application with the requested UID 3, which is running as a root application + * @param aAppUid the UID 3 of the target application. + * @return a TApaTask which refers to the running instance of the application. + * if the application is not running, the TApaTask's Exists() function will return EFalse. + */ + TApaTask FindRootApp( TUid aAppUid ) const; + + /** + * Query whether an application's window group is running as a root application. + * @param aWgId the window group identifier of the target application. + * @return ETrue if this window group is running as a root window group. + */ + TBool IsRootWindowGroup( TInt aWgId ) const; + +private: + + CCaTaskList( RWsSession& aWsSession ); + + void ConstructL(); + +private: + + RWsSession& iWs; + + RArray iWgs; + + }; + +#endif diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/cahandler/app/src/caapphandler.cpp --- a/contentstorage/cahandler/app/src/caapphandler.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/cahandler/app/src/caapphandler.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -27,6 +27,7 @@ #include "caapphandler.h" #include "cainnerentry.h" #include "cauninstalloperation.h" +#include"catasklist.h" #include "cautils.h" #include "cadef.h" @@ -49,9 +50,9 @@ CCaAppHandler *CCaAppHandler::NewL() { CCaAppHandler *handler = new(ELeave) CCaAppHandler(); - CleanupStack::PushL(handler); + CleanupStack::PushL( handler ); handler->ConstructL(); - CleanupStack::Pop(handler); + CleanupStack::Pop( handler ); return handler; } @@ -73,40 +74,113 @@ { } +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CCaAppHandler::HandleCommandL( + CCaInnerEntry &aEntry, const TDesC8 &aCommand ) +{ + if( aCommand == KCaCmdOpen() + && aEntry.GetEntryTypeName() == KCaTypeApp() ) + { + TInt viewId(-1); + TBuf viewIdValue; + if( aEntry.FindAttribute( KCaAttrView(), viewIdValue ) ) + { + if( MenuUtils::GetTUint( viewIdValue, (TUint &) viewId ) + != KErrNone ) + { + User::Leave( KErrCorrupt ); + } + } + LaunchApplicationL( + TUid::Uid( aEntry.GetUid() ), KNullDesC8(), viewId ); + } + else if ( aCommand == KCaCmdClose() + && aEntry.GetEntryTypeName() == KCaTypeApp() ) + { + CloseApplicationL( aEntry ); + } + else if ( aCommand == KCaCmdRemove() + && ( aEntry.GetEntryTypeName() == KCaTypeApp() + || aEntry.GetEntryTypeName() == KCaTypeWidget() ) ) + { + if ( iUninstallOperation && iUninstallOperation->IsActive() ) + { + User::Leave( KErrInUse ); + } + delete iUninstallOperation; + iUninstallOperation = NULL; + iUninstallOperation = CCaUninstallOperation::NewL( aEntry ); + } + else + { + User::Leave( KErrNotSupported ); + } +} // --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // -void CCaAppHandler::HandleCommandL(CCaInnerEntry &aEntry, - const TDesC8 &aCommand) +void CCaAppHandler::LaunchApplicationL( + const TUid aUid, const TDesC8 &aParam, TInt aViewId ) { - if (aCommand == KCaCmdOpen() && aEntry.GetEntryTypeName() - == KCaTypeApp()) { - TInt viewId(-1); - TBuf viewIdValue; - if (aEntry.FindAttribute(KCaAttrView(), viewIdValue)) { - if (MenuUtils::GetTUint(viewIdValue, (TUint &) viewId) - != KErrNone) { - User::Leave(KErrCorrupt); - } + if( aViewId > 0 && iEikEnv ) + { + TUid viewId = TUid::Uid( aViewId ); + TVwsViewId view( aUid, viewId ); + iEikEnv->EikAppUi()->ActivateViewL( view ); } - LaunchApplicationL(TUid::Uid(aEntry.GetUid()), KNullDesC8(), - viewId); - } else if (aCommand == KCaCmdClose() && aEntry.GetEntryTypeName() - == KCaTypeApp()) { - CloseApplicationL(aEntry); - } else if (aCommand == KCaCmdRemove() - && (aEntry.GetEntryTypeName() == KCaTypeApp() - || aEntry.GetEntryTypeName() == KCaTypeWidget())) { - if (iUninstallOperation && iUninstallOperation->IsActive()) { - User::Leave(KErrInUse); + else + { + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); + + CCaTaskList* taskList = CCaTaskList::NewLC( wsSession ); + TApaTask task = taskList->FindRootApp( aUid ); + CleanupStack::PopAndDestroy( taskList ); + + if( task.Exists() ) + { + task.BringToForeground(); + } + else + { + TApaAppInfo appInfo; + TApaAppCapabilityBuf capabilityBuf; + RApaLsSession appArcSession; + User::LeaveIfError( appArcSession.Connect() ); + CleanupClosePushL( appArcSession ); + + User::LeaveIfError( appArcSession.GetAppInfo( appInfo, aUid ) ); + User::LeaveIfError( appArcSession.GetAppCapability( + capabilityBuf, aUid ) ); + + TApaAppCapability &caps = capabilityBuf(); + TFileName appName = appInfo.iFullName; + CApaCommandLine *cmdLine = CApaCommandLine::NewLC(); + cmdLine->SetExecutableNameL( appName ); + + if( caps.iLaunchInBackground ) + { + cmdLine->SetCommandL( EApaCommandBackground ); + } + else + { + cmdLine->SetCommandL( EApaCommandRun ); + } + + cmdLine->SetTailEndL( aParam ); + + User::LeaveIfError( appArcSession.StartApp( *cmdLine ) ); + + CleanupStack::PopAndDestroy( cmdLine ); + CleanupStack::PopAndDestroy( &appArcSession ); } - delete iUninstallOperation; - iUninstallOperation = NULL; - iUninstallOperation = CCaUninstallOperation::NewL(aEntry); - } else { - User::Leave(KErrNotSupported); + CleanupStack::PopAndDestroy( &wsSession ); } } @@ -114,85 +188,33 @@ // // --------------------------------------------------------------------------- // -void CCaAppHandler::LaunchApplicationL(const TUid aUid, - const TDesC8 &aParam, TInt aViewId) +void CCaAppHandler::CloseApplicationL( CCaInnerEntry &aEntry ) { - if (aViewId > 0 && iEikEnv) { - TUid viewId = TUid::Uid(aViewId); - TVwsViewId view(aUid, viewId); - iEikEnv->EikAppUi()->ActivateViewL(view); - } else { - RWsSession wsSession; - User::LeaveIfError(wsSession.Connect()); - CleanupClosePushL (wsSession); - - CAknTaskList *taskList = CAknTaskList::NewL(wsSession); - TApaTask task = taskList->FindRootApp(aUid); - delete taskList; - - if (task.Exists()) { - task.BringToForeground(); - } else { - TApaAppInfo appInfo; - TApaAppCapabilityBuf capabilityBuf; - RApaLsSession appArcSession; - User::LeaveIfError(appArcSession.Connect()); - CleanupClosePushL (appArcSession); + RWsSession wsSession; + User::LeaveIfError( wsSession.Connect() ); + CleanupClosePushL( wsSession ); - User::LeaveIfError(appArcSession.GetAppInfo(appInfo, aUid)); - User::LeaveIfError(appArcSession.GetAppCapability( - capabilityBuf, aUid)); - - TApaAppCapability &caps = capabilityBuf(); - TFileName appName = appInfo.iFullName; - CApaCommandLine *cmdLine = CApaCommandLine::NewLC(); - cmdLine->SetExecutableNameL(appName); + if( ( aEntry.GetFlags() & ERunning ) + && !( aEntry.GetFlags() & ESystem ) ) + { + RBuf value; + CleanupClosePushL( value ); + value.CreateL( KCaMaxAttrValueLen ); + if( aEntry.FindAttribute( KCaAttrWindowGroupId, value ) ) + { + TInt wgId( KErrNotFound ); + TLex16 parser( value ); + if( KErrNone == parser.Val( wgId ) && wgId > 0 ) + { + TWsEvent event; + event.SetTimeNow(); + event.SetType( KAknShutOrHideApp ); + wsSession.SendEventToWindowGroup( wgId, event ); + } + } + CleanupStack::PopAndDestroy( &value ); + } - if (caps.iLaunchInBackground) { - cmdLine->SetCommandL(EApaCommandBackground); - } else { - cmdLine->SetCommandL(EApaCommandRun); - } - - cmdLine->SetTailEndL(aParam); - - User::LeaveIfError(appArcSession.StartApp(*cmdLine)); - - CleanupStack::PopAndDestroy(cmdLine); - CleanupStack::PopAndDestroy(&appArcSession); - } - CleanupStack::PopAndDestroy(&wsSession); - } + CleanupStack::PopAndDestroy( &wsSession ); } -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CCaAppHandler::CloseApplicationL(CCaInnerEntry &aEntry) -{ - RWsSession wsSession; - User::LeaveIfError(wsSession.Connect()); - CleanupClosePushL (wsSession); - - if ((aEntry.GetFlags() & ERunning) && - (!(aEntry.GetFlags() & ESystem))) { - RBuf value; - CleanupClosePushL(value); - value.CreateL(KCaMaxAttrValueLen); - if (aEntry.FindAttribute(KCaAttrWindowGroupId, value)) { - TInt wgId(KErrNotFound); - TLex16 parser(value); - if (KErrNone == parser.Val(wgId) && wgId > 0) { - TWsEvent event; - event.SetTimeNow(); - event.SetType(KAknShutOrHideApp); - wsSession.SendEventToWindowGroup(wgId, event); - } - } - CleanupStack::PopAndDestroy(&value); - } - - CleanupStack::PopAndDestroy(&wsSession); -} - diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/cahandler/app/src/catasklist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/cahandler/app/src/catasklist.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: ?Description + * + */ + +#include + +#include"catasklist.h" + +CCaTaskList* CCaTaskList::NewL( RWsSession& aWsSession ) + { + CCaTaskList* self = NewLC( aWsSession ); + CleanupStack::Pop( self ); + return self; + } + +CCaTaskList* CCaTaskList::NewLC( RWsSession& aWsSession ) + { + CCaTaskList* self = new(ELeave) CCaTaskList( aWsSession ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CCaTaskList::CCaTaskList( RWsSession& aWsSession ) +: iWs(aWsSession) + { + } + +void CCaTaskList::ConstructL() + { + UpdateListL(); + } + +CCaTaskList::~CCaTaskList() + { + iWgs.Close(); + } + +void CCaTaskList::UpdateListL() + { + User::LeaveIfError( iWs.WindowGroupList( &iWgs ) ); + } + + +TApaTask CCaTaskList::FindRootApp( TUid aAppUid ) const + { + TApaTask task( iWs ); + task.SetWgId(0); // initialise task to non-existant task + // wgId = 0 tells FindAppByUid to start looking for apps + TInt wgId(0); + FOREVER + { + CApaWindowGroupName::FindByAppUid( aAppUid, iWs, wgId ); + // KErrNotFound means that no more apps can be found + if( wgId == KErrNotFound ) + break; + if( IsRootWindowGroup( wgId ) ) + { + // Found a root wg with the right app UID, return it. + task.SetWgId( wgId ); + break; + } + } + return task; + } + +TBool CCaTaskList::IsRootWindowGroup( TInt aWgId ) const + { + TInt count = iWgs.Count(); + for( TInt i=0; i #include #include -#include +#include #include "cainnerentry.h" #include "cahandler.h" @@ -36,18 +36,10 @@ public: int execute(const CaEntry &entry, const QString &commandName) { - TPtrC16 commandNameDesC16( - reinterpret_cast(commandName.utf16())); - - QScopedPointer commandNameDesc8; + QScopedPointer commandNameDesc8(XQConversions::qStringToS60Desc8(commandName)); + QScopedPointer innerEntry(NULL); TRAPD(result, - commandNameDesc8.reset(CnvUtfConverter::ConvertFromUnicodeToUtf7L( - commandNameDesC16, false))); - - QScopedPointer innerEntry(NULL); - - TRAP(result, innerEntry.reset(CCaInnerEntry::NewL()); CaObjectAdapter::convertL(entry, *innerEntry); @@ -59,4 +51,5 @@ } }; + #endif diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/cahandler/tapp/src/catapphandler.cpp --- a/contentstorage/cahandler/tapp/src/catapphandler.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/cahandler/tapp/src/catapphandler.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -38,6 +38,7 @@ */ CaTappHandler::CaTappHandler(QObject *parent) { + Q_UNUSED(parent); mAiwMgr = new XQApplicationManager(); } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/caappscanner/src/casrvappscanner.cpp --- a/contentstorage/casrv/caappscanner/src/casrvappscanner.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/caappscanner/src/casrvappscanner.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -751,10 +751,10 @@ attrVal.CreateL( KCaMaxAttrValueLen ); aEntry->FindAttribute( KCaAttrLongName, attrVal ); if( attrVal.Compare( info.iCaption ) != KErrNone - || aEntry->GetText().Compare( info.iShortCaption ) + || aEntry->GetText().Compare( info.iCaption ) != KErrNone ) { - aEntry->SetTextL( info.iShortCaption ); + aEntry->SetTextL( info.iCaption ); aEntry->AddAttributeL( KCaAttrLongName, info.iCaption ); changed = ETrue; } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/calocalizerscanner/src/calocalizerscannerproxy.cpp --- a/contentstorage/casrv/calocalizerscanner/src/calocalizerscannerproxy.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/calocalizerscanner/src/calocalizerscannerproxy.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -99,10 +99,7 @@ { QString locale = QLocale::system().name(); QString filename = QString( "contentstorage_" ) + locale; - if( !LoadTranslator( filename ) ) - { - //User::Leave(KErrNotFound); TODO what here - } + LoadTranslator( filename ); TPtrC ptrLocale( reinterpret_cast( locale.constData() ) ); TBuf propertyValue; // trap is here to assure deletion of qtranslator in case code leaves diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/carunningappmonitor/src/carunningappmonitor.cpp --- a/contentstorage/casrv/carunningappmonitor/src/carunningappmonitor.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/carunningappmonitor/src/carunningappmonitor.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -214,7 +214,6 @@ { UpdateRunningAppStorageL(); } - //TODO should we handle any event that will cancel observation? } // ----------------------------------------------------------------------------- diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/data/cawidgetscanner.rss --- a/contentstorage/casrv/cawidgetscanner/data/cawidgetscanner.rss Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/data/cawidgetscanner.rss Wed Mar 24 03:15:43 2010 +0200 @@ -31,7 +31,7 @@ RESOURCE REGISTRY_INFO theInfo { // UID for the DLL - dll_uid = 0x20028706;// TODO: change to proper uid + dll_uid = 0x20028706; // Declare array of interface info interfaces = { @@ -44,7 +44,7 @@ // Info for Widget IMPLEMENTATION_INFO { - implementation_uid = 0x20028707;// TODO: change to proper uid + implementation_uid = 0x20028707; version_no = 1; display_name = "Widget"; default_data = "WIDGET"; diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp --- a/contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp Wed Mar 24 03:15:43 2010 +0200 @@ -20,7 +20,7 @@ TARGET cawidgetscanner.dll TARGETTYPE PLUGIN -UID 0x10009D8D 0x20028706 // TODO: change to proper uid +UID 0x10009D8D 0x20028706 CAPABILITY CAP_ECOM_PLUGIN LANG SC diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/inc/cawidgetdescription.h --- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetdescription.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetdescription.h Wed Mar 24 03:15:43 2010 +0200 @@ -108,6 +108,18 @@ void SetLibraryL( const TDesC& aLibrary ); /* + * Path setter + * @param aLibrary widget library + */ + void SetPathL( const TDesC& aPath ); + + /* + * Path getter + * @return widget library + */ + TPtrC GetPath( ) const; + + /* * Missing flag setter * @param aMissing flag */ @@ -264,7 +276,11 @@ */ RBuf iIconUri; - + /* + * Widget library. Own + */ + RBuf iPath; + /* * Widget library. Own */ diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h --- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h Wed Mar 24 03:15:43 2010 +0200 @@ -122,7 +122,7 @@ void SetUriL( TXmlEngElement & aElement, CCaWidgetDescription * aWidget ); /** - * Sets widgets library + * Sets widgets library and path created from library * @param aElement xml element * @param aPackageUid package uid * @param aWidget widget to set value diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/inc/widgetscannerutils.h --- a/contentstorage/casrv/cawidgetscanner/inc/widgetscannerutils.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/inc/widgetscannerutils.h Wed Mar 24 03:15:43 2010 +0200 @@ -24,6 +24,7 @@ #include // CONSTANTS +_LIT(KAttrWidgetPath, "widget:path"); _LIT(KAttrWidgetLibrary, "widget:library"); _LIT(KAttrWidgetUri, "widget:uri"); _LIT(KSlash, "/"); diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp --- a/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -74,6 +74,9 @@ //library iLibrary.CreateL( KCaMaxAttrValueLen ); aEntry->FindAttribute( KAttrWidgetLibrary, iLibrary ); + //path + iPath.CreateL( KCaMaxAttrValueLen ); + aEntry->FindAttribute( KAttrWidgetPath, iPath ); //uri iUri.CreateL( KCaMaxAttrValueLen ); aEntry->FindAttribute( KAttrWidgetUri, iUri ); @@ -146,6 +149,7 @@ iUri.Close(); iIconUri.Close(); iLibrary.Close(); + iPath.Close(); iModificationTime.Close(); } @@ -335,7 +339,23 @@ { return iLibrary; } - +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +TPtrC CCaWidgetDescription::GetPath( ) const + { + return iPath; + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CCaWidgetDescription::SetPathL( const TDesC& aPath ) + { + iPath.Close(); + iPath.CreateL(aPath); + } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- @@ -421,14 +441,12 @@ { entry->SetFlags( EVisible ); } - if ( iPackageUid ) { TBuf uidDesc; uidDesc.AppendNum( iPackageUid,EHex ); entry->AddAttributeL( KCaPackageUid, uidDesc ); } - if ( iEntryId != KNoId ) { entry->SetId( iEntryId ); @@ -449,7 +467,10 @@ entry->SetFlags( entry->GetFlags() & ~ERemovable ); } } - + if ( iPath != KNullDesC ) + { + entry->AddAttributeL(KAttrWidgetPath, iPath); + } if ( iTitle != KNullDesC ) { entry->SetTextL(iTitle); diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp --- a/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -280,7 +280,7 @@ } // ---------------------------------------------------------------------------- -// +// keep in mind that setLibrary also setsPath // ---------------------------------------------------------------------------- // void CCaWidgetScannerParser::SetLibraryL( TXmlEngElement & aElement, @@ -293,6 +293,10 @@ if( attributeValue->Compare( KNullDesC ) != 0 ) { HBufC *libraryPath = GetManifestDirectoryPathLC( aPackageUid ); + + //set path for hs to use, trim last 2 chars (doubleslash) + aWidget->SetPathL(libraryPath->Mid(0,libraryPath->Length()-1)); + libraryPath->ReAllocL( libraryPath->Length() + attributeValue->Length()); diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/data/castorage.db Binary file contentstorage/castorage/data/castorage.db has changed diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/data/castoragedb Binary file contentstorage/castorage/data/castoragedb has changed diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/data/castoragedb_create.sql --- a/contentstorage/castorage/data/castoragedb_create.sql Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/data/castoragedb_create.sql Wed Mar 24 03:15:43 2010 +0200 @@ -211,7 +211,7 @@ INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) VALUES ( 'Version', '00001' ); INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) -VALUES ( 'Language', 'en_GB' ); +VALUES ( 'Language', '' ); INSERT INTO CA_DB_PROPERTIES ( DB_PROPERTY, DB_VALUE ) VALUES ( 'QMfile', 'db_textmap_' ); diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/data/castoragedb_variant.bat --- a/contentstorage/castorage/data/castoragedb_variant.bat Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/data/castoragedb_variant.bat Wed Mar 24 03:15:43 2010 +0200 @@ -1,5 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem @echo off -del castoragedb -sqlite3 castoragedb ".read castoragedb_create.sql" -sqlite3 castoragedb ".genfkey --exec" -sqlite3 castoragedb ".read castoragedb_variant.sql" + +del castorage.db +sqlite3 castorage.db ".read castoragedb_create.sql" +sqlite3 castorage.db ".genfkey --exec" +sqlite3 castorage.db ".read castoragedb_variant.sql" diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/data/castoragedb_variant_test.bat --- a/contentstorage/castorage/data/castoragedb_variant_test.bat Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/data/castoragedb_variant_test.bat Wed Mar 24 03:15:43 2010 +0200 @@ -1,5 +1,21 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem @echo off -del castoragedb -sqlite3 castoragedb ".read castoragedb_create.sql" -sqlite3 castoragedb ".genfkey --exec" -sqlite3 castoragedb ".read castoragedb_variant_test.sql" + +del castorage.db +sqlite3 castorage.db ".read castoragedb_create.sql" +sqlite3 castorage.db ".genfkey --exec" +sqlite3 castorage.db ".read castoragedb_variant_test.sql" diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/inc/caconsts.h --- a/contentstorage/castorage/inc/caconsts.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/inc/caconsts.h Wed Mar 24 03:15:43 2010 +0200 @@ -18,7 +18,7 @@ #ifndef CACONSTS_H_ #define CACONSTS_H_ -_LIT( KDbName, "castoragedb" ); +_LIT( KDbName, "castorage.db" ); _LIT( KCDrive, "c:" ); _LIT( KZDrive, "z:" ); _LIT( KDoubleSlash, "\\" ); diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/inc/cadebug.h --- a/contentstorage/castorage/inc/cadebug.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/inc/cadebug.h Wed Mar 24 03:15:43 2010 +0200 @@ -46,14 +46,14 @@ #endif /** - * TODO - * - * @param aData + * Prints given descriptor to debug log file. + * @param aData descriptor with data. */ static void DoOutput( TDesC8& aData ); /** - * TODO + * Prints given descriptor to debug log file. + * @param aFmt descriptor with data. */ static void DebugStringNarrowL( const char* aFmt, ... ) { @@ -71,7 +71,8 @@ } /** - * TODO + * Prints given descriptor to debug log file. + * @param aFmt descriptor with data. */ static void DebugStringWideL( const char* aFmt, ... ) { @@ -93,7 +94,8 @@ } /** - * TODO + * Prints given time containinf descriptor to log file. + * @param aBuf descriptor with time information. */ static void DebugBufferL( const TDesC8& aBuf ) { @@ -101,7 +103,8 @@ } /** - * TODO + * Prints given time containinf descriptor to log file. + * @param aBuf descriptor with time information. */ static void DebugBufferL( const TDesC& aBuf ) { @@ -109,7 +112,8 @@ } /** - * TODO + * Prints given time to log file. + * @param aTime time to print. */ static void DebugTimeL( const TTime& aTime ) { @@ -123,7 +127,8 @@ } /** - * TODO + * Prints given descriptor to debug log file. + * @param aData descriptor with data. */ static void DoOutput( TDesC8& aData ) { @@ -135,7 +140,8 @@ #ifdef _KQTI_MENU_TRACE_PERFORMANCE /** - * TODO + * Prints given descriptor to preformance log file. + * @param aData descriptor with data. */ static void DoOutputPerf(TDesC8& aData) { @@ -146,7 +152,8 @@ } /** - * TODO + * Formats string for performance debug output. + * @param aFmt string for debug output. */ static void DebugStringNarrowPerfL( const char* aFmt, ... ) { diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/inc/casqlcommands.h --- a/contentstorage/castorage/inc/casqlcommands.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/inc/casqlcommands.h Wed Mar 24 03:15:43 2010 +0200 @@ -137,16 +137,19 @@ FROM CA_ENTRY LEFT JOIN CA_ICON ON EN_ICON_ID = ICON_ID \ WHERE ENTRY_ID IN ( %S )" ); -_LIT( KSQLGetList, "SELECT ENTRY_ID, EN_TEXT, EN_DESCRIPTION, EN_ROLE, \ +_LIT( KSQLGetList1, "SELECT ENTRY_ID, EN_TEXT, EN_DESCRIPTION, EN_ROLE, \ EN_TYPE_NAME, EN_ICON_ID, EN_CREATION_TIME, EN_UID, EN_FLAGS, IC_FILENAME, \ -IC_SKIN_ID, IC_APP_ID FROM \ -CA_ENTRY LEFT JOIN CA_ICON ON EN_ICON_ID = ICON_ID " ); +IC_SKIN_ID, IC_APP_ID FROM CA_ENTRY " ); -_LIT( KSQLGetListByParentId, "SELECT ENTRY_ID, EN_TEXT, EN_DESCRIPTION, \ +_LIT( KSQLGetList2, "LEFT JOIN CA_ICON ON EN_ICON_ID = ICON_ID " ); + + +_LIT( KSQLGetListByParentId1, "SELECT ENTRY_ID, EN_TEXT, EN_DESCRIPTION, \ EN_ROLE, EN_TYPE_NAME, EN_ICON_ID, EN_CREATION_TIME, EN_UID, EN_FLAGS, \ IC_FILENAME, IC_SKIN_ID, IC_APP_ID, \ -GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION FROM CA_ENTRY \ -LEFT JOIN CA_ICON ON EN_ICON_ID = ICON_ID LEFT JOIN CA_GROUP_ENTRY ON \ +GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION FROM CA_ENTRY " ); + +_LIT( KSQLGetListByParentId2, "LEFT JOIN CA_ICON ON EN_ICON_ID = ICON_ID LEFT JOIN CA_GROUP_ENTRY ON \ GE_ENTRY_ID = ENTRY_ID WHERE GE_GROUP_ID = :GE_GROUP_ID %S " ); //Get all attributes by entry id @@ -248,6 +251,14 @@ _LIT( KAnd, " AND " ); _LIT( KLimit, " LIMIT "); _LIT( KSingleQuotes, "\'" ); +_LIT( KDot, "." ); +_LIT( KEqual, " = "); +_LIT( KEmpty, "" ); +_LIT( KGroupBy, " GROUP BY " ); +_LIT( KAt, " at" ); +_LIT( KLeftJoinCaAttrubute1, " LEFT JOIN CA_ATTRIBUTE as at" ); +_LIT( KLeftJoinCaAttrubute2, " ON ENTRY_ID = at" ); +_LIT( KLeftJoinCaAttrubute3, ".AT_ENTRY_ID " ); _LIT( KSQLSortOrderNameAsc, " ORDER BY EN_TEXT ASC" ); _LIT( KSQLSortOrderNameDesc, " ORDER BY EN_TEXT DESC" ); diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/src/casqlitestorage.cpp --- a/contentstorage/castorage/src/casqlitestorage.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/src/casqlitestorage.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -24,6 +24,7 @@ #include "caarraycleanup.inl" #include "calocalizationentry.h" #include "cainternaltypes.h" +#include "cadef.h" // --------------------------------------------------------------------------- // CCASqLiteStorage::CCpStorageEngine() @@ -51,12 +52,25 @@ User::LeaveIfError( CreatePrivateDirPath( iPrivatePathCDrive, KCDrive, KNullDesC ) ); + if( iSqlDb.Open( iPrivatePathCDriveDb, &KSqlDbConfig ) ) { //we could not load data base from C-drive lets try Rom LoadDataBaseFromRomL(); } + else + { + TBuf versionValue; + DbPropertyL(KCaDbPropVersion, versionValue); + ASSERT(versionValue.Length()>0); + if( versionValue.CompareC( KCaDbVersion ) ) + { + // database loaded from C: is obsolete, load from Z: + iSqlDb.Close(); + LoadDataBaseFromRomL(); + } + } } // --------------------------------------------------------------------------- @@ -75,7 +89,7 @@ if( !( BaflUtils::FileExists( iRfs, iPrivatePathZDriveDb ) ) ) { - User::Panic( _L("fatal error - castoragedb not exists in ROM"), + User::Panic( _L("fatal error - castorage.db not exists in ROM"), KErrNotFound ); } else @@ -186,29 +200,6 @@ CleanupStack::PopAndDestroy( sqlGetAttributesQuery ); } - if( aQuery->GetAttributes().Count() ) - { - for( int i=aResultContainer.Count()-1; i>=0; i--) - { - for( int j=0; jGetAttributes().Count(); j++ ) - { - const TPtrC attrNameFromQuery( aQuery->GetAttributes()[j]->Name() ); - const TPtrC attrValueFromQuery( aQuery->GetAttributes()[j]->Value() ); - - TBuf16 value; - aResultContainer[i]->FindAttribute( attrNameFromQuery, value ); - - if( value.CompareC( attrValueFromQuery ) ) - { - // remove from results - delete aResultContainer[i]; - aResultContainer.Remove( i ); - break; - } - } - } - } - // set entries if proper order if they were fetched by ids if( aQuery->GetIds().Count() > 0 ) { @@ -246,7 +237,6 @@ void CCaSqLiteStorage::GetEntriesIdsL( const CCaInnerQuery* aQuery, RArray& aResultIdArray ) { - /* CCaSqlQuery* sqlGetEntriesIdsQuery = CCaSqlQuery::NewLC( iSqlDb ); CaSqlQueryCreator::CreateGetEntriesQueryL( aQuery, sqlGetEntriesIdsQuery ); @@ -255,17 +245,7 @@ sqlGetEntriesIdsQuery->ExecuteL( aResultIdArray, CCaSqlQuery::EEntryTable ); CleanupStack::PopAndDestroy( sqlGetEntriesIdsQuery ); - */ - RPointerArray resultContainer; - CleanupResetAndDestroyPushL( resultContainer ); - GetEntriesL( aQuery, resultContainer ); - for( TInt i=0; iGetId(); - aResultIdArray.AppendL( id ); - } - - CleanupStack::PopAndDestroy( &resultContainer ); + } // --------------------------------------------------------------------------- @@ -836,7 +816,6 @@ case TCaOperationParams::EAppend: default: { - // TODO: do nothing when default break; } } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/src/casqlquery.cpp --- a/contentstorage/castorage/src/casqlquery.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/src/casqlquery.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -664,19 +664,16 @@ TInt rowCount(0); while( iStatement.Next() == KSqlAtRow ) { - TInt entryId = iStatement. - ColumnInt( ColumnIndexL( iStatement, KColumnEntryId ) ); - TInt role = iStatement. - ColumnInt( ColumnIndexL( iStatement, KColumnEnRole ) ); - // TODO get NULL ??? - TInt32 uid = - iStatement.ColumnInt( ColumnIndexL( iStatement, KColumnEnUid ) ) - ? iStatement.ColumnInt( ColumnIndexL( iStatement, KColumnEnUid ) ) - : 0; - TUint flags = iStatement.ColumnInt( ColumnIndexL( iStatement, - KColumnEnFlags ) ); - TInt idIcon = iStatement.ColumnInt( ColumnIndexL( iStatement, - KColumnEnIdIcon ) ); + TInt entryId = iStatement.ColumnInt( + ColumnIndexL( iStatement, KColumnEntryId ) ); + TInt role = iStatement.ColumnInt( + ColumnIndexL( iStatement, KColumnEnRole ) ); + TInt32 uid = iStatement.ColumnInt( + ColumnIndexL( iStatement, KColumnEnUid ) ); + TUint flags = iStatement.ColumnInt( + ColumnIndexL( iStatement, KColumnEnFlags ) ); + TInt idIcon = iStatement.ColumnInt( + ColumnIndexL( iStatement, KColumnEnIdIcon ) ); TPtrC text; User::LeaveIfError( iStatement. ColumnText( ColumnIndexL( diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/castorage/src/casqlquerycreator.cpp --- a/contentstorage/castorage/src/casqlquerycreator.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/castorage/src/casqlquerycreator.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -668,26 +668,115 @@ &typeNameWhereStatement ); CleanupStack::PopAndDestroy( &typeNameWhereStatement ); } + + if( aQuery->GetAttributes().Count() ) + { + RBuf whereAttributes; + whereAttributes.CleanupClosePushL(); + whereAttributes.CreateL( KEmpty ); + + for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ ) + { + // at1.AT_NAME = 'Attribute_Name_1' AND at1.AT_VALUE = 'Attribute_VALUE_1' + TPtrC atrName( aQuery->GetAttributes().operator [](j-1)->Name() ); + TPtrC atrValue( aQuery->GetAttributes().operator [](j-1)->Value() ); + + whereAttributes.ReAllocL( whereAttributes.Length() + 2 * KAnd().Length() + + 4 * KSingleQuotes().Length() + + 2 * KMaxIntNumLength + + 2 * KAt().Length() + 2 * KDot().Length() + 2 * KEqual().Length() + + KColumnAttrName().Length() + KColumnAttrValue().Length() + + atrName.Length() + atrValue.Length() ); + + whereAttributes.Append( KAnd ); + + whereAttributes.Append( KAt ); + whereAttributes.AppendNum( j ); + whereAttributes.Append( KDot ); + whereAttributes.Append( KColumnAttrName ); + whereAttributes.Append( KEqual ); + whereAttributes.Append( KSingleQuotes ); + whereAttributes.Append( atrName ); + whereAttributes.Append( KSingleQuotes ); + + whereAttributes.Append( KAnd ); + + whereAttributes.Append( KAt ); + whereAttributes.AppendNum( j ); + whereAttributes.Append( KDot ); + whereAttributes.Append( KColumnAttrValue ); + whereAttributes.Append( KEqual ); + whereAttributes.Append( KSingleQuotes ); + whereAttributes.Append( atrValue ); + whereAttributes.Append( KSingleQuotes ); + + } + + whereStatement.ReAllocL( whereStatement.Length() + whereAttributes.Length() ); + whereStatement.Append( whereAttributes ); + + CleanupStack::PopAndDestroy( &whereAttributes ); + } + + RBuf leftJoins; + leftJoins.CleanupClosePushL(); + leftJoins.CreateL( KEmpty ); + if( aQuery->GetAttributes().Count() ) + { + for( TInt j=1; j <= aQuery->GetAttributes().Count(); j++ ) + { + // LEFT JOIN CA_ATTRIBUTE as at1 ON ENTRY_ID = at1.AT_ENTRY_ID + leftJoins.ReAllocL( leftJoins.Length() + + KLeftJoinCaAttrubute1().Length() + KMaxIntNumLength + + KLeftJoinCaAttrubute2().Length() + KMaxIntNumLength + + KLeftJoinCaAttrubute3().Length() + ); + + leftJoins.Append( KLeftJoinCaAttrubute1 ); + leftJoins.AppendNum( j ); + leftJoins.Append( KLeftJoinCaAttrubute2 ); + leftJoins.AppendNum( j ); + leftJoins.Append( KLeftJoinCaAttrubute3 ); + } + } + + + whereStatement.ReAllocL( whereStatement.Length() + + KGroupBy().Length() + KColumnEntryId().Length() ); + whereStatement.Append( KGroupBy ); + whereStatement.Append( KColumnEntryId ); TInt groupId = aQuery->GetParentId(); RBuf query; query.CleanupClosePushL(); if( groupId > 0 ) { - query.CreateL( KSQLGetListByParentId().Length() - + whereStatement.Length() - 2 ); - query.AppendFormat( KSQLGetListByParentId, &whereStatement ); + RBuf getListByParentId2withWhere; + getListByParentId2withWhere.CleanupClosePushL(); + getListByParentId2withWhere.CreateL( KSQLGetListByParentId2().Length() + whereStatement.Length() ); + getListByParentId2withWhere.AppendFormat( KSQLGetListByParentId2, &whereStatement ); + + query.ReAllocL( KSQLGetListByParentId1().Length() + leftJoins.Length() + + getListByParentId2withWhere.Length() ); + query.Append( KSQLGetListByParentId1 ); + query.Append( leftJoins ); + query.Append( getListByParentId2withWhere ); + CleanupStack::PopAndDestroy( &getListByParentId2withWhere ); } else { - query.CreateL( KSQLGetList().Length() ); - query.Append( KSQLGetList ); + query.CreateL( KSQLGetList1().Length() ); + query.Append( KSQLGetList1 ); + query.ReAllocL( query.Length() + leftJoins.Length() + KSQLGetList2().Length() ); + query.Append( leftJoins ); + query.Append( KSQLGetList2 ); if( whereStatement.Length() >= KAnd().Length() ) { TPtrC ptrWhereStatement( whereStatement.Right( whereStatement.Length() - KAnd().Length() ) ); - query.ReAllocL( KSQLGetList().Length() + KWhere().Length() + query.ReAllocL( query.Length() + KWhere().Length() + ptrWhereStatement.Length() ); + query.Append( KWhere ); query.Append( ptrWhereStatement ); } @@ -707,6 +796,7 @@ aSqlQuery->SetQueryL( query ); CleanupStack::PopAndDestroy( &query ); + CleanupStack::PopAndDestroy( &leftJoins ); CleanupStack::PopAndDestroy( &whereStatement ); } diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/cautils/src/cainnerquery.cpp --- a/contentstorage/cautils/src/cainnerquery.cpp Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/cautils/src/cainnerquery.cpp Wed Mar 24 03:15:43 2010 +0200 @@ -128,8 +128,7 @@ { iEntryTypeNames = new ( ELeave ) CDesC16ArrayFlat( KDefaultGranularity ); iParentId = -1; - // TODO Item | Group - iRole = CCaInnerQuery::Item | CCaInnerQuery::Group; + iRole = Item | Group; } // --------------------------------------------------------------------------- @@ -194,7 +193,6 @@ // EXPORT_C void CCaInnerQuery::SetEntryTypeNames( CDesC16ArrayFlat* aArray ) { - //TODO: Quickt setter for now, probably sth more convinient needed ASSERT( aArray ); delete iEntryTypeNames; iEntryTypeNames = aArray; diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/group/group.pro --- a/contentstorage/group/group.pro Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/group/group.pro Wed Mar 24 03:15:43 2010 +0200 @@ -19,9 +19,9 @@ #Exporting ibys BLD_INF_RULES.prj_exports += \ "$${LITERAL_HASH}ifndef CONTENT_ARSENAL_STORAGE_UT" \ - "../castorage/data/castoragedb z:/private/20022F90/castoragedb" \ + "../castorage/data/castorage.db z:/private/20022F90/castorage.db" \ "$${LITERAL_HASH}else " \ - "../castorage/data/castoragedb z:/castoragedb" \ + "../castorage/data/castorage.db z:/castorage.db" \ "$${LITERAL_HASH}endif" \ "../data/backup_registration.xml z:/private/20022F90/backup_registration.xml" diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/inc/cadef.h --- a/contentstorage/inc/cadef.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/inc/cadef.h Wed Mar 24 03:15:43 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: Definition of different constants - * Version : %version: 10.1.6 % << Don't touch! Updated by Synergy at check-out. + * Version : %version: 10.1.7 % << Don't touch! Updated by Synergy at check-out. * */ @@ -22,6 +22,12 @@ #include #include "cainternaltypes.h" + +// database version +_LIT( KCaDbVersion, "00001" ); + + + // --------------------------------------------------------- //Ca constants diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/inc/casrvdef.h --- a/contentstorage/inc/casrvdef.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/inc/casrvdef.h Wed Mar 24 03:15:43 2010 +0200 @@ -35,8 +35,6 @@ const TInt KInputPosition2 = 1; const TInt KOutputPosition = 2; -//TODO: move to another location so that server have access to it -// Opcodes used in message passing between client and server enum TCaServerRequests { EContentArsenalGetList_GetSize = 100, diff -r 7f0462e8c3da -r 1e87eb3b400f contentstorage/srvinc/cainstallnotifier.h --- a/contentstorage/srvinc/cainstallnotifier.h Tue Mar 23 23:55:55 2010 +0200 +++ b/contentstorage/srvinc/cainstallnotifier.h Wed Mar 24 03:15:43 2010 +0200 @@ -85,7 +85,7 @@ * @param aNotifier Reference to notifier interface. * @param aNotificationType Notification type. */ - static CCaInstallNotifier* NewL( MCaInstallListener& aListener, +IMPORT_C static CCaInstallNotifier* NewL( MCaInstallListener& aListener, TNotificationType aNotificationType ); /** diff -r 7f0462e8c3da -r 1e87eb3b400f homescreensrv.pro --- a/homescreensrv.pro Tue Mar 23 23:55:55 2010 +0200 +++ b/homescreensrv.pro Wed Mar 24 03:15:43 2010 +0200 @@ -23,6 +23,7 @@ homescreensrv_plat \ screensavermodel \ bagetmodel \ + activitymanager \ tsrc CONFIG += ordered diff -r 7f0462e8c3da -r 1e87eb3b400f rom/homescreensrv_core.iby --- a/rom/homescreensrv_core.iby Tue Mar 23 23:55:55 2010 +0200 +++ b/rom/homescreensrv_core.iby Wed Mar 24 03:15:43 2010 +0200 @@ -31,7 +31,6 @@ file=ABI_DIR\BUILD_DIR\casathandler.dll SHARED_LIB_DIR\casathandler.dll file=ABI_DIR\BUILD_DIR\castorage.dll SHARED_LIB_DIR\castorage.dll file=ABI_DIR\BUILD_DIR\MenuInterface.dll SHARED_LIB_DIR\MenuInterface.dll -ECOM_PLUGIN( castockhandlerplugins.dll, castockhandlerplugins.rsc ) file=ABI_DIR\BUILD_DIR\casrvmanager.dll SHARED_LIB_DIR\casrvmanager.dll ECOM_PLUGIN( casatmonitor.dll, casatmonitor.rsc ) ECOM_PLUGIN( caappscanner.dll, caappscanner.rsc ) @@ -39,7 +38,7 @@ ECOM_PLUGIN( calocalizerscanner.dll, calocalizerscanner.rsc ) ECOM_PLUGIN( carunningappmonitor.dll, carunningappmonitor.rsc ) -data=ZPRIVATE\20022F90\castoragedb private\20022F90\castoragedb +data=ZPRIVATE\20022F90\castorage.db private\20022F90\castorage.db // ---- appfoundation -------------------------------------------- diff -r 7f0462e8c3da -r 1e87eb3b400f sis/homescreensrv.pkg --- a/sis/homescreensrv.pkg Tue Mar 23 23:55:55 2010 +0200 +++ b/sis/homescreensrv.pkg Wed Mar 24 03:15:43 2010 +0200 @@ -137,7 +137,7 @@ "/epoc32/release/armv5/urel/casathandler.dll" - "c:/sys/bin/casathandler.dll" "/epoc32/release/armv5/urel/castorage.dll" - "c:/sys/bin/castorage.dll" "/epoc32/release/armv5/urel/castockhandlerplugins.dll" - "c:/sys/bin/castockhandlerplugins.dll" -"/epoc32/data/z/private/20022F90/castoragedb" - "c:/private/20022F90/castoragedb" +"/epoc32/data/z/private/20022F90/castorage.db" - "c:/private/20022F90/castorage.db" "/epoc32/data/z/resource/plugins/castockhandlerplugins.rsc"-"c:/resource/plugins/castockhandlerplugins.rsc" ; ---- appfoundation --------------------------------------------