# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1268401434 -7200 # Node ID bd874ee5e5e2ecac703caf3bed0a29c4f8c87be2 # Parent d0529222e3f095ade9fc1499059b0ac39d7ed30e Revision: 201007 Kit: 201008 diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccclientsession/src/ccclientsession.cpp --- a/contentcontrolsrv/ccclientsession/src/ccclientsession.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccclientsession/src/ccclientsession.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -30,6 +30,7 @@ const TUint KCcSrvMajorVersionNumber = 1; const TUint KCcSrvMinorVersionNumber = 0; const TUint KCcSrvBuildVersionNumber = 0; +const TInt KDefaultMessageSlots = 3; // ----------------------------------------------------------------------------- @@ -78,7 +79,7 @@ TInt retry=2; for (;;) { - TInt r = CreateSession( KCcSrvName, ver ); + TInt r = CreateSession( KCcSrvName, ver, KDefaultMessageSlots ); if (r != KErrNotFound && r != KErrServerTerminated) { diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrv/inc/ccsrv.h --- a/contentcontrolsrv/ccsrv/inc/ccsrv.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrv/inc/ccsrv.h Fri Mar 12 15:43:54 2010 +0200 @@ -114,13 +114,9 @@ /** * Sends message to defined session - * @param aSender Sender session - * @param aReceiver Receiver session * @param aMsgBuf Message buffer */ void SendMsgL( - TUint32 aSender, - TUint32 aReceiver, CCcSrvMsg& aMessage ); private: diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrv/inc/ccsrvsession.h --- a/contentcontrolsrv/ccsrv/inc/ccsrvsession.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrv/inc/ccsrvsession.h Fri Mar 12 15:43:54 2010 +0200 @@ -90,8 +90,6 @@ * */ void ReceiveMsgL( - TUint32 aSender, - TUint32 aReceiver, CCcSrvMsg& aMessage ); private: diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrv/src/ccsrv.cpp --- a/contentcontrolsrv/ccsrv/src/ccsrv.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrv/src/ccsrv.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -299,16 +299,14 @@ // ----------------------------------------------------------------------------- // void CCcSrv::SendMsgL( - TUint32 aSender, - TUint32 aReceiver, CCcSrvMsg& aMessage ) { TBool found( EFalse ); for ( TUint32 i = 0; i < iSessions.Count() && !found; i++ ) { - if ( iSessions[ i ]->Id() == aReceiver ) + if ( iSessions[ i ]->Id() == aMessage.Receiver() ) { - iSessions[ i ]->ReceiveMsgL( aSender, aReceiver, aMessage ); + iSessions[ i ]->ReceiveMsgL( aMessage ); found = ETrue; } } diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrv/src/ccsrvsession.cpp --- a/contentcontrolsrv/ccsrv/src/ccsrvsession.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrv/src/ccsrvsession.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -215,11 +215,35 @@ void CCcSrvSession::HandleWaitForApiReqL( RMessage2& aMessage ) { + // Wait for the next API request or Observer notification CCcSrvMsg* tr = CCcSrvMsg::NewL(); CleanupStack::PushL( tr ); tr->SetMessage( aMessage ); iRequests.AppendL( tr ); CleanupStack::Pop( tr ); + + // Check if there is outstanding requests + for ( TInt i = 0; i < iRequests.Count(); i++ ) + { + CCcSrvMsg* req = iRequests[ i ]; + if ( req->MsgId() == ECcRegisterObserverNtf || + req->MsgId() == ECcUnregisterObserverNtf ) + { + iRequests.Remove( i ); + CleanupStack::PushL( req ); + SendObserverNtfL( req->Sender(), req->MsgId() ); + CleanupStack::PopAndDestroy( req ); + break; + } + else if ( req->Function() == ECcApiReq ) + { + iRequests.Remove( i ); + CleanupStack::PushL( req ); + ReceiveMsgL( *req ); + CleanupStack::PopAndDestroy( req ); + break; + } + } } // ----------------------------------------------------------------------- @@ -234,6 +258,20 @@ tr->SetMessage( aMessage ); iRequests.AppendL( tr ); CleanupStack::Pop( tr ); + + // Check if there is outstanding API notifications + for ( TInt i = 0; i < iRequests.Count(); i++ ) + { + CCcSrvMsg* req = iRequests[ i ]; + if ( req->Function() == ECcApiNtf ) + { + iRequests.Remove( i ); + CleanupStack::PushL( req ); + ReceiveMsgL( *req ); + CleanupStack::PopAndDestroy( req ); + break; + } + } } // ----------------------------------------------------------------------- @@ -289,12 +327,14 @@ message->InternalizeL( stream ); message->SetTrId( Server().GetTrId() ); message->SetMessage( aMessage ); + message->SetSender( iId ); + message->SetReceiver( providerAddress ); - Server().SendMsgL( iId, providerAddress, *message ); + iRequests.AppendL( message ); + CleanupStack::Pop( message ); - iRequests.AppendL( message ); + Server().SendMsgL( *message ); - CleanupStack::Pop( message ); CleanupStack::PopAndDestroy( msgBuf ); } @@ -325,9 +365,11 @@ CleanupStack::PushL( message ); message->InternalizeL( stream ); message->SetMessage( aMessage ); + message->SetSender( sender ); + message->SetReceiver( receiver ); // Forward message to receiver - Server().SendMsgL( sender, receiver, *message ); + Server().SendMsgL( *message ); CleanupStack::PopAndDestroy( message ); CleanupStack::PopAndDestroy( msgBuf ); @@ -396,11 +438,13 @@ CleanupStack::PushL( message ); message->InternalizeL( stream ); message->SetMessage( aMessage ); + message->SetSender( iId ); // Forward notification to observers for ( TInt i = 0; i < iObservers.Count(); i++ ) { - Server().SendMsgL( iId, iObservers[ i ], *message ); + message->SetReceiver( iObservers[ i ] ); + Server().SendMsgL( *message ); } message->Message().Complete( KErrNone ); @@ -414,49 +458,48 @@ // ----------------------------------------------------------------------- // void CCcSrvSession::ReceiveMsgL( - TUint32 aSender, - TUint32 aReceiver, CCcSrvMsg& aMessage ) { TBool found( EFalse ); CCcSrvMsg* req( NULL ); - TInt index( 0 ); for ( TInt i = 0; i < iRequests.Count() && !found; i++ ) { req = iRequests[ i ]; - if ( aMessage.Message().Function() == ECcApiReq && - req->Message().Function() == ECcWaitForApiReq && + if ( aMessage.Function() == ECcApiReq && + req->Function() == ECcWaitForApiReq && !req->Message().IsNull() ) { // Pending WaitForApiReq transaction found - index = i; + iRequests.Remove( i ); found = ETrue; } - else if ( aMessage.Message().Function() == ECcApiResp && + else if ( aMessage.Function() == ECcApiResp && req->TrId() == aMessage.TrId() ) { // Pending ApiReq transaction found - index = i; + iRequests.Remove( i ); found = ETrue; } - else if ( aMessage.Message().Function() == ECcApiNtf && - req->Message().Function() == ECcWaitForApiNtf && + else if ( aMessage.Function() == ECcApiNtf && + req->Function() == ECcWaitForApiNtf && !req->Message().IsNull() ) { // Pending WaitForApiNtf transaction found - index = i; + iRequests.Remove( i ); found = ETrue; } } if ( found ) { + CleanupStack::PushL( req ); + // Write sender of message - TPckgBuf packagedSender( aSender ); + TPckgBuf packagedSender( aMessage.Sender() ); req->Message().WriteL( 1, packagedSender, 0 ); // Write receiver of message - TPckgBuf packagedReceiver( aReceiver ); + TPckgBuf packagedReceiver( aMessage.Receiver() ); req->Message().WriteL( 2, packagedReceiver, 0 ); // Externalize message header @@ -477,27 +520,43 @@ req->Message().WriteL( 3, ptr, 0); CleanupStack::PopAndDestroy( des ); CleanupStack::PopAndDestroy( buf ); - + // Complete request req->Message().Complete( KErrNone ); + if ( aMessage.DataSize() ) { // Store request data to be read later // with GetMsgData() req->SetTrId( aMessage.TrId() ); req->SetData( aMessage.Data() ); + iRequests.AppendL( req ); + CleanupStack::Pop( req ); } else { - // Received request does not contain any data - // -> remove it from request array - iRequests.Remove( index ); - delete req; + CleanupStack::PopAndDestroy( req ); } } else { - User::Leave( KErrNotFound ); + if ( aMessage.Function() == ECcApiReq || + aMessage.Function() == ECcApiNtf ) + { + // Store message to handled later + CCcSrvMsg* msg = CCcSrvMsg::NewL(); + CleanupStack::PushL( msg ); + msg->SetFunction( aMessage.Function() ); + msg->SetSender( aMessage.Sender() ); + msg->SetReceiver( aMessage.Receiver() ); + msg->SetMsgId( aMessage.MsgId() ); + msg->SetTrId( aMessage.TrId() ); + msg->SetStatus( aMessage.Status() ); + msg->SetData( aMessage.Data() ); + iRequests.AppendL( msg ); + CleanupStack::Pop( msg ); + } + // ECcApiResp are ignored } } @@ -509,25 +568,30 @@ TUint32 aSender, TUint32 aNtf ) { + // Create notification + CCcSrvMsg* ntf = CCcSrvMsg::NewL(); + CleanupStack::PushL( ntf ); + ntf->SetMsgId( aNtf ); + ntf->SetSender( aSender ); + // Notify provider of registered observer TBool found( EFalse ); CCcSrvMsg* req( NULL ); - TInt index( 0 ); for ( TInt i = 0; i < iRequests.Count() && !found; i++ ) { req = iRequests[ i ]; - if ( req->Message().Function() == ECcWaitForApiReq && + if ( req->Function() == ECcWaitForApiReq && !req->Message().IsNull() ) { // Pending WaitForApiReq transaction found - index = i; + iRequests.Remove( i ); found = ETrue; } } if ( found ) { // Write sender of message - TPckgBuf packagedSender( aSender ); + TPckgBuf packagedSender( ntf->Sender() ); req->Message().WriteL( 1, packagedSender, 0 ); // Write receiver of message @@ -535,9 +599,6 @@ req->Message().WriteL( 2, packagedReceiver, 0 ); // Externalize notification - CCcSrvMsg* ntf = CCcSrvMsg::NewL(); - CleanupStack::PushL( ntf ); - ntf->SetMsgId( aNtf ); HBufC8* ntfBuf = ntf->MarshalL(); CleanupStack::PushL( ntfBuf ); TPtr8 ntfPtr( NULL, 0); @@ -550,13 +611,14 @@ // Complete request req->Message().Complete( KErrNone ); - iRequests.Remove( index ); delete req; - + } else { - User::Leave( KErrNotFound ); + // Store notification to be sent later + iRequests.AppendL( ntf ); + CleanupStack::Pop( ntf ); } } diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrvapi/bwins/ccsrvapiu.def --- a/contentcontrolsrv/ccsrvapi/bwins/ccsrvapiu.def Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrvapi/bwins/ccsrvapiu.def Fri Mar 12 15:43:54 2010 +0200 @@ -2,18 +2,24 @@ ?SetStatus@CCcSrvMsg@@QAEXH@Z @ 1 NONAME ; void CCcSrvMsg::SetStatus(int) ?ExternalizeHeaderL@CCcSrvMsg@@QAEXAAVRWriteStream@@@Z @ 2 NONAME ; void CCcSrvMsg::ExternalizeHeaderL(class RWriteStream &) ?DataSize@CCcSrvMsg@@QAEHXZ @ 3 NONAME ; int CCcSrvMsg::DataSize(void) - ?MsgId@CCcSrvMsg@@QAEKXZ @ 4 NONAME ; unsigned long CCcSrvMsg::MsgId(void) - ?SetMsgId@CCcSrvMsg@@QAEXK@Z @ 5 NONAME ; void CCcSrvMsg::SetMsgId(unsigned long) - ?Data@CCcSrvMsg@@QAE?AVTPtrC8@@XZ @ 6 NONAME ; class TPtrC8 CCcSrvMsg::Data(void) - ?MarshalL@CCcSrvMsg@@QAEPAVHBufC8@@XZ @ 7 NONAME ; class HBufC8 * CCcSrvMsg::MarshalL(void) - ?SetTrId@CCcSrvMsg@@QAEXK@Z @ 8 NONAME ; void CCcSrvMsg::SetTrId(unsigned long) - ?InternalizeHeaderL@CCcSrvMsg@@QAEXAAVRReadStream@@@Z @ 9 NONAME ; void CCcSrvMsg::InternalizeHeaderL(class RReadStream &) - ?NewL@CCcSrvMsg@@SAPAV1@XZ @ 10 NONAME ; class CCcSrvMsg * CCcSrvMsg::NewL(void) - ?InternalizeL@CCcSrvMsg@@QAEXAAVRReadStream@@@Z @ 11 NONAME ; void CCcSrvMsg::InternalizeL(class RReadStream &) - ?TrId@CCcSrvMsg@@QAEKXZ @ 12 NONAME ; unsigned long CCcSrvMsg::TrId(void) - ?Message@CCcSrvMsg@@QAE?AVRMessage2@@XZ @ 13 NONAME ; class RMessage2 CCcSrvMsg::Message(void) - ?SetData@CCcSrvMsg@@QAEXABVTDesC8@@@Z @ 14 NONAME ; void CCcSrvMsg::SetData(class TDesC8 const &) - ?ExternalizeL@CCcSrvMsg@@QAEXAAVRWriteStream@@@Z @ 15 NONAME ; void CCcSrvMsg::ExternalizeL(class RWriteStream &) - ?SetMessage@CCcSrvMsg@@QAEXAAVRMessage2@@@Z @ 16 NONAME ; void CCcSrvMsg::SetMessage(class RMessage2 &) - ?Status@CCcSrvMsg@@QAEHXZ @ 17 NONAME ; int CCcSrvMsg::Status(void) + ?SetSender@CCcSrvMsg@@QAEXK@Z @ 4 NONAME ; void CCcSrvMsg::SetSender(unsigned long) + ?Sender@CCcSrvMsg@@QAEKXZ @ 5 NONAME ; unsigned long CCcSrvMsg::Sender(void) + ?MsgId@CCcSrvMsg@@QAEKXZ @ 6 NONAME ; unsigned long CCcSrvMsg::MsgId(void) + ?Receiver@CCcSrvMsg@@QAEKXZ @ 7 NONAME ; unsigned long CCcSrvMsg::Receiver(void) + ?SetFunction@CCcSrvMsg@@QAEXH@Z @ 8 NONAME ; void CCcSrvMsg::SetFunction(int) + ?SetMsgId@CCcSrvMsg@@QAEXK@Z @ 9 NONAME ; void CCcSrvMsg::SetMsgId(unsigned long) + ?Data@CCcSrvMsg@@QAE?AVTPtrC8@@XZ @ 10 NONAME ; class TPtrC8 CCcSrvMsg::Data(void) + ?MarshalL@CCcSrvMsg@@QAEPAVHBufC8@@XZ @ 11 NONAME ; class HBufC8 * CCcSrvMsg::MarshalL(void) + ?SetTrId@CCcSrvMsg@@QAEXK@Z @ 12 NONAME ; void CCcSrvMsg::SetTrId(unsigned long) + ?Function@CCcSrvMsg@@QAEHXZ @ 13 NONAME ; int CCcSrvMsg::Function(void) + ?InternalizeHeaderL@CCcSrvMsg@@QAEXAAVRReadStream@@@Z @ 14 NONAME ; void CCcSrvMsg::InternalizeHeaderL(class RReadStream &) + ?SetReceiver@CCcSrvMsg@@QAEXK@Z @ 15 NONAME ; void CCcSrvMsg::SetReceiver(unsigned long) + ?NewL@CCcSrvMsg@@SAPAV1@XZ @ 16 NONAME ; class CCcSrvMsg * CCcSrvMsg::NewL(void) + ?InternalizeL@CCcSrvMsg@@QAEXAAVRReadStream@@@Z @ 17 NONAME ; void CCcSrvMsg::InternalizeL(class RReadStream &) + ?TrId@CCcSrvMsg@@QAEKXZ @ 18 NONAME ; unsigned long CCcSrvMsg::TrId(void) + ?Message@CCcSrvMsg@@QAE?AVRMessage2@@XZ @ 19 NONAME ; class RMessage2 CCcSrvMsg::Message(void) + ?SetData@CCcSrvMsg@@QAEXABVTDesC8@@@Z @ 20 NONAME ; void CCcSrvMsg::SetData(class TDesC8 const &) + ?ExternalizeL@CCcSrvMsg@@QAEXAAVRWriteStream@@@Z @ 21 NONAME ; void CCcSrvMsg::ExternalizeL(class RWriteStream &) + ?SetMessage@CCcSrvMsg@@QAEXAAVRMessage2@@@Z @ 22 NONAME ; void CCcSrvMsg::SetMessage(class RMessage2 &) + ?Status@CCcSrvMsg@@QAEHXZ @ 23 NONAME ; int CCcSrvMsg::Status(void) diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrvapi/eabi/ccsrvapiu.def --- a/contentcontrolsrv/ccsrvapi/eabi/ccsrvapiu.def Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrvapi/eabi/ccsrvapiu.def Fri Mar 12 15:43:54 2010 +0200 @@ -1,21 +1,27 @@ EXPORTS _ZN9CCcSrvMsg10SetMessageER9RMessage2 @ 1 NONAME - _ZN9CCcSrvMsg12ExternalizeLER12RWriteStream @ 2 NONAME - _ZN9CCcSrvMsg12InternalizeLER11RReadStream @ 3 NONAME - _ZN9CCcSrvMsg18ExternalizeHeaderLER12RWriteStream @ 4 NONAME - _ZN9CCcSrvMsg18InternalizeHeaderLER11RReadStream @ 5 NONAME - _ZN9CCcSrvMsg4DataEv @ 6 NONAME - _ZN9CCcSrvMsg4NewLEv @ 7 NONAME - _ZN9CCcSrvMsg4TrIdEv @ 8 NONAME - _ZN9CCcSrvMsg5MsgIdEv @ 9 NONAME - _ZN9CCcSrvMsg6StatusEv @ 10 NONAME - _ZN9CCcSrvMsg7MessageEv @ 11 NONAME - _ZN9CCcSrvMsg7SetDataERK6TDesC8 @ 12 NONAME - _ZN9CCcSrvMsg7SetTrIdEm @ 13 NONAME - _ZN9CCcSrvMsg8DataSizeEv @ 14 NONAME - _ZN9CCcSrvMsg8MarshalLEv @ 15 NONAME - _ZN9CCcSrvMsg8SetMsgIdEm @ 16 NONAME - _ZN9CCcSrvMsg9SetStatusEi @ 17 NONAME - _ZTI9CCcSrvMsg @ 18 NONAME - _ZTV9CCcSrvMsg @ 19 NONAME + _ZN9CCcSrvMsg11SetFunctionEi @ 2 NONAME + _ZN9CCcSrvMsg11SetReceiverEm @ 3 NONAME + _ZN9CCcSrvMsg12ExternalizeLER12RWriteStream @ 4 NONAME + _ZN9CCcSrvMsg12InternalizeLER11RReadStream @ 5 NONAME + _ZN9CCcSrvMsg18ExternalizeHeaderLER12RWriteStream @ 6 NONAME + _ZN9CCcSrvMsg18InternalizeHeaderLER11RReadStream @ 7 NONAME + _ZN9CCcSrvMsg4DataEv @ 8 NONAME + _ZN9CCcSrvMsg4NewLEv @ 9 NONAME + _ZN9CCcSrvMsg4TrIdEv @ 10 NONAME + _ZN9CCcSrvMsg5MsgIdEv @ 11 NONAME + _ZN9CCcSrvMsg6SenderEv @ 12 NONAME + _ZN9CCcSrvMsg6StatusEv @ 13 NONAME + _ZN9CCcSrvMsg7MessageEv @ 14 NONAME + _ZN9CCcSrvMsg7SetDataERK6TDesC8 @ 15 NONAME + _ZN9CCcSrvMsg7SetTrIdEm @ 16 NONAME + _ZN9CCcSrvMsg8DataSizeEv @ 17 NONAME + _ZN9CCcSrvMsg8FunctionEv @ 18 NONAME + _ZN9CCcSrvMsg8MarshalLEv @ 19 NONAME + _ZN9CCcSrvMsg8ReceiverEv @ 20 NONAME + _ZN9CCcSrvMsg8SetMsgIdEm @ 21 NONAME + _ZN9CCcSrvMsg9SetSenderEm @ 22 NONAME + _ZN9CCcSrvMsg9SetStatusEi @ 23 NONAME + _ZTI9CCcSrvMsg @ 24 NONAME + _ZTV9CCcSrvMsg @ 25 NONAME diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrvapi/inc/ccsrvapi.h --- a/contentcontrolsrv/ccsrvapi/inc/ccsrvapi.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrvapi/inc/ccsrvapi.h Fri Mar 12 15:43:54 2010 +0200 @@ -46,7 +46,7 @@ // - Arg[1]: Registered provider address (out), TUint32 // - Arg[2]: Not used // - Arg[2]: Not used - ECcReqisterProvider = ECcIPCFunctionBase, + ECcReqisterProvider, // ---------------------------------------------------------------------------- // RegisterObserver // ---------------------------------------------------------------------------- @@ -179,7 +179,7 @@ // ---------------------------------------------------------------------------- enum TCcSrvMessages { - ECcMessageBase = 0, + ECcMessageBase, // ---------------------------------------------------------------------------- // RegisterObserverNtf // ---------------------------------------------------------------------------- @@ -190,7 +190,7 @@ // - Message id: EHsCcRegisterObserverNtf // - Transaction id: None // - Message data: None - ECcRegisterObserverNtf = ECcMessageBase, + ECcRegisterObserverNtf, // ---------------------------------------------------------------------------- // UnregisterObserverNtf // ---------------------------------------------------------------------------- @@ -258,6 +258,39 @@ IMPORT_C void SetMessage( RMessage2& aMessage ); /** + * Returns IPC function + */ + IMPORT_C TInt Function(); + + /** + * Stores IPC function + * @param aFunction IPC function + */ + IMPORT_C void SetFunction( TInt aFunction ); + + /** + * Returns sender of the message + */ + IMPORT_C TUint32 Sender(); + + /** + * Stores sender of the message + * @param aSender Message sender + */ + IMPORT_C void SetSender( TUint32 ); + + /** + * Returns receiver of the message + */ + IMPORT_C TUint32 Receiver(); + + /** + * Stores receiver of the message + * @param aReceiver Message receiver + */ + IMPORT_C void SetReceiver( TUint32 ); + + /** * Returns message id */ IMPORT_C TUint32 MsgId(); @@ -343,6 +376,21 @@ RMessage2 iMessage; /** + * IPC function + */ + TInt iFunction; + + /** + * Sender + */ + TUint32 iSender; + + /** + * Receiver + */ + TUint32 iReceiver; + + /** * Message id */ TUint32 iMsgId; diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/ccsrvapi/src/ccsrvmsg.cpp --- a/contentcontrolsrv/ccsrvapi/src/ccsrvmsg.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/ccsrvapi/src/ccsrvmsg.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -79,6 +79,55 @@ EXPORT_C void CCcSrvMsg::SetMessage( RMessage2& aMessage ) { iMessage = aMessage; + SetFunction( aMessage.Function() ); + } + +// ----------------------------------------------------------------------------- +// CCcSrvMsg::Sender() +// ----------------------------------------------------------------------------- +EXPORT_C TInt CCcSrvMsg::Function() + { + return( iFunction ) ; + } + +// ----------------------------------------------------------------------------- +// CCcSrvMsg::SetSender() +// ----------------------------------------------------------------------------- +EXPORT_C void CCcSrvMsg::SetFunction( TInt aFunction ) + { + iFunction = aFunction; + } + +// ----------------------------------------------------------------------------- +// CCcSrvMsg::Sender() +// ----------------------------------------------------------------------------- +EXPORT_C TUint32 CCcSrvMsg::Sender() + { + return( iSender ) ; + } + +// ----------------------------------------------------------------------------- +// CCcSrvMsg::SetSender() +// ----------------------------------------------------------------------------- +EXPORT_C void CCcSrvMsg::SetSender( TUint32 aSender ) + { + iSender = aSender; + } + +// ----------------------------------------------------------------------------- +// CCcSrvMsg::Receiver() +// ----------------------------------------------------------------------------- +EXPORT_C TUint32 CCcSrvMsg::Receiver() + { + return( iReceiver ) ; + } + +// ----------------------------------------------------------------------------- +// CCcSrvMsg::SetReceiver() +// ----------------------------------------------------------------------------- +EXPORT_C void CCcSrvMsg::SetReceiver( TUint32 aReceiver ) + { + iReceiver = aReceiver; } // ----------------------------------------------------------------------------- diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h --- a/contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccapiclient/inc/hsccapiclient.h Fri Mar 12 15:43:54 2010 +0200 @@ -80,66 +80,86 @@ public: // From MHsContentController /** - * + * See from API documentation */ TInt WidgetListL( CHsContentInfoArray& aArray ); - + /** - * + * See from API documentation + */ + TInt WidgetListL( CHsContentInfo& aInfo, CHsContentInfoArray& aArray ); + + /** + * See from API documentation */ TInt ViewListL( CHsContentInfoArray& aArray ); /** - * + * See from API documentation */ TInt AppListL( CHsContentInfoArray& aArray ); /** - * + * See from API documentation */ TInt AddWidgetL( CHsContentInfo& aInfo ); /** - * + * See from API documentation */ TInt RemoveWidgetL( CHsContentInfo& aInfo ); /** - * + * See from API documentation */ TInt AddViewL( CHsContentInfo& aInfo ); /** - * + * See from API documentation */ TInt RemoveViewL( CHsContentInfo& aInfo ); /** - * + * See from API documentation */ TInt ActivateViewL( CHsContentInfo& aInfo ); /** - * + * See from API documentation */ TInt ActivateAppL( CHsContentInfo& aInfo ); - /** - * - */ + /** + * See from API documentation + */ TInt ActiveViewL( CHsContentInfo& aInfo ); /** - * + * See from API documentation */ TInt ActiveAppL( CHsContentInfo& aInfo ); private: // Functions /** - * + * Requests receiving of content change notification */ void WaitForApiNtfL(); + /** + * Internalize received response message + */ + TInt InternalizeRespL( TPtr8& aResp, TUint32& aTrId, TUint32& aDataSize ); + + /** + * Internalize received CHsContentInfo type response message data + */ + TInt InternalizeContentInfoL( CHsContentInfo& aInfo, TUint32 aTrId, TUint32 aDataSize ); + + /** + * Internalize received CHsContentInfoArray type response message data + */ + TInt InternalizeContentInfoArrayL( CHsContentInfoArray& aInfo, TUint32 aTrId, TUint32 aDataSize ); + private: // Data /** * Session to Homescreen content control server diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp --- a/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccapiclient/src/hsccapiclient.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -102,12 +102,27 @@ // void CHsCcApiClient::RunL() { - if ( !iStatus.Int() ) + TInt err( iStatus.Int() ); + HBufC8* header( NULL ); + TPtr8 headerPtr( NULL, 0 ); + + if ( !err ) + { + // Read API request header + header = iApiHeader->AllocL(); + CleanupStack::PushL( header ); + headerPtr.Set( header->Des() ); + } + + // Receive next API notification + WaitForApiNtfL(); + + if ( !err ) { // Get received message header CCcSrvMsg* message = CCcSrvMsg::NewL(); CleanupStack::PushL( message ); - RDesReadStream stream( iApiHeaderPtr ); + RDesReadStream stream( headerPtr ); CleanupClosePushL( stream ); message->InternalizeHeaderL( stream ); CleanupStack::PopAndDestroy( &stream ); @@ -138,10 +153,10 @@ } CleanupStack::PopAndDestroy( message ); } - - // Receive next API notification - WaitForApiNtfL(); - + if ( header ) + { + CleanupStack::PopAndDestroy( header ); + } } // ----------------------------------------------------------------------------- @@ -188,37 +203,73 @@ if ( !err ) { - // Internalize WidgetListResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - if ( !err ) + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); + if ( !err && dataSize ) { - if ( respMsg->DataSize() ) - { - // Get API response data - HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); - CleanupStack::PushL( dataBuf ); - TPtr8 dataPtr( NULL, 0 ); - dataPtr.Set( dataBuf->Des() ); - TPckgBuf trId( respMsg->TrId() ); - err = iSession.GetMsgData( trId, dataPtr ); - if ( !err ) - { - // Internalize API response data - RDesReadStream dataStream( dataPtr ); - CleanupClosePushL( dataStream ); - aArray.InternalizeL( dataStream ); - CleanupStack::PopAndDestroy( &dataStream ); - } - CleanupStack::PopAndDestroy( dataBuf ); - } + // Internalize API response data + err = InternalizeContentInfoArrayL( aArray, trId, dataSize ); } - CleanupStack::PopAndDestroy( respMsg ); + } + + // Cleanup + CleanupStack::PopAndDestroy( msgBuf ); + CleanupStack::PopAndDestroy( reqMsg ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CHsCcApiClient::WidgetListL +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::WidgetListL( + CHsContentInfo& aInfo, CHsContentInfoArray& aArray ) + { + TInt err( KErrNone ); + + // Create WidgetListReq API request + CCcSrvMsg* reqMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( reqMsg ); + reqMsg->SetMsgId( EHsCcWidgetListReq ); + reqMsg->SetTrId( 0 ); + + // Marshal WidgetListReq data to a descriptor + HBufC8* dataBuf = aInfo.MarshalL(); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + reqMsg->SetData( dataPtr ); + + delete dataBuf; + dataBuf = NULL; + + // Marshal API request + HBufC8* msgBuf = reqMsg->MarshalL(); + CleanupStack::PushL( msgBuf ); + TPtr8 msgPtr( NULL, 0 ); + msgPtr.Set( msgBuf->Des() ); + + // Send API request + // Sender and receiver address not defined -> message is routed + // according to the provider id + TPckgBuf provider( ECcHomescreen ); + TPckgBuf sender; + TPckgBuf receiver; + err = iSession.Send( ECcApiReq, provider, sender, receiver, msgPtr ); + + if ( !err ) + { + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); + if ( !err && dataSize ) + { + // Internalize API response data + err = InternalizeContentInfoArrayL( aArray, trId, dataSize ); + } } // Cleanup @@ -259,37 +310,15 @@ if ( !err ) { - // Internalize ViewListResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - if ( !err ) + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); + if ( !err && dataSize ) { - if ( respMsg->DataSize() ) - { - // Get API response data - HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); - CleanupStack::PushL( dataBuf ); - TPtr8 dataPtr( NULL, 0 ); - dataPtr.Set( dataBuf->Des() ); - TPckgBuf trId( respMsg->TrId() ); - err = iSession.GetMsgData( trId, dataPtr ); - if ( !err ) - { - // Internalize API response data - RDesReadStream dataStream( dataPtr ); - CleanupClosePushL( dataStream ); - aArray.InternalizeL( dataStream ); - CleanupStack::PopAndDestroy( &dataStream ); - } - CleanupStack::PopAndDestroy( dataBuf ); - } + // Internalize API response data + err = InternalizeContentInfoArrayL( aArray, trId, dataSize ); } - CleanupStack::PopAndDestroy( respMsg ); } // Cleanup @@ -330,37 +359,15 @@ if ( !err ) { - // Internalize AppListResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - if ( !err ) + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); + if ( !err && dataSize ) { - if ( respMsg->DataSize() ) - { - // Get API response data - HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); - CleanupStack::PushL( dataBuf ); - TPtr8 dataPtr( NULL, 0 ); - dataPtr.Set( dataBuf->Des() ); - TPckgBuf trId( respMsg->TrId() ); - err = iSession.GetMsgData( trId, dataPtr ); - if ( !err ) - { - // Internalize API response data - RDesReadStream dataStream( dataPtr ); - CleanupClosePushL( dataStream ); - aArray.InternalizeL( dataStream ); - CleanupStack::PopAndDestroy( &dataStream ); - } - CleanupStack::PopAndDestroy( dataBuf ); - } + // Internalize API response data + err = InternalizeContentInfoArrayL( aArray, trId, dataSize ); } - CleanupStack::PopAndDestroy( respMsg ); } // Cleanup @@ -409,15 +416,10 @@ if ( !err ) { - // Internalize AddWidgetResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - CleanupStack::PopAndDestroy( respMsg ); + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); } // Cleanup @@ -466,15 +468,10 @@ if ( !err ) { - // Internalize RemoveWidgetResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - CleanupStack::PopAndDestroy( respMsg ); + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); } // Cleanup @@ -523,15 +520,10 @@ if ( !err ) { - // Internalize AddViewResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - CleanupStack::PopAndDestroy( respMsg ); + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); } // Cleanup @@ -580,15 +572,10 @@ if ( !err ) { - // Internalize RemoveViewResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - CleanupStack::PopAndDestroy( respMsg ); + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); } // Cleanup @@ -637,15 +624,10 @@ if ( !err ) { - // Internalize ActivateViewResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - CleanupStack::PopAndDestroy( respMsg ); + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); } // Cleanup @@ -694,15 +676,10 @@ if ( !err ) { - // Internalize ActivateAppResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - CleanupStack::PopAndDestroy( respMsg ); + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); } // Cleanup @@ -743,37 +720,15 @@ if ( !err ) { - // Internalize AppListResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - if ( !err ) + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); + if ( !err && dataSize ) { - if ( respMsg->DataSize() ) - { - // Get API response data - HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); - CleanupStack::PushL( dataBuf ); - TPtr8 dataPtr( NULL, 0 ); - dataPtr.Set( dataBuf->Des() ); - TPckgBuf trId( respMsg->TrId() ); - err = iSession.GetMsgData( trId, dataPtr ); - if ( !err ) - { - // Internalize API response data - RDesReadStream dataStream( dataPtr ); - CleanupClosePushL( dataStream ); - aInfo.InternalizeL( dataStream ); - CleanupStack::PopAndDestroy( &dataStream ); - } - CleanupStack::PopAndDestroy( dataBuf ); - } + // Internalize API response data + err = InternalizeContentInfoL( aInfo, trId, dataSize ); } - CleanupStack::PopAndDestroy( respMsg ); } // Cleanup @@ -814,37 +769,15 @@ if ( !err ) { - // Internalize AppListResp API response - CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); - CleanupStack::PushL( respMsg ); - RDesReadStream respStream( msgPtr ); - CleanupClosePushL( respStream ); - respMsg->InternalizeHeaderL( respStream ); - CleanupStack::PopAndDestroy( &respStream ); - err = respMsg->Status(); - if ( !err ) + // Internalize response message + TUint32 trId; + TUint32 dataSize; + err = InternalizeRespL( msgPtr, trId, dataSize ); + if ( !err && dataSize ) { - if ( respMsg->DataSize() ) - { - // Get API response data - HBufC8* dataBuf = HBufC8::NewL( respMsg->DataSize() ); - CleanupStack::PushL( dataBuf ); - TPtr8 dataPtr( NULL, 0 ); - dataPtr.Set( dataBuf->Des() ); - TPckgBuf trId( respMsg->TrId() ); - err = iSession.GetMsgData( trId, dataPtr ); - if ( !err ) - { - // Internalize API response data - RDesReadStream dataStream( dataPtr ); - CleanupClosePushL( dataStream ); - aInfo.InternalizeL( dataStream ); - CleanupStack::PopAndDestroy( &dataStream ); - } - CleanupStack::PopAndDestroy( dataBuf ); - } + // Internalize API response data + err = InternalizeContentInfoL( aInfo, trId, dataSize ); } - CleanupStack::PopAndDestroy( respMsg ); } // Cleanup @@ -878,4 +811,83 @@ } +// ----------------------------------------------------------------------------- +// CHsCcApiClient::InternalizeRespL() +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::InternalizeRespL( + TPtr8& aResp, TUint32& aTrId, TUint32& aDataSize ) + { + TInt err( KErrNone ); + + CCcSrvMsg* respMsg = CCcSrvMsg::NewL(); + CleanupStack::PushL( respMsg ); + RDesReadStream respStream( aResp ); + CleanupClosePushL( respStream ); + respMsg->InternalizeHeaderL( respStream ); + CleanupStack::PopAndDestroy( &respStream ); + err = respMsg->Status(); + aTrId = respMsg->TrId(); + aDataSize = respMsg->DataSize(); + CleanupStack::PopAndDestroy( respMsg ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CHsCcApiClient::InternalizeContentInfoL() +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::InternalizeContentInfoL( + CHsContentInfo& aInfo, TUint32 aTrId, TUint32 aDataSize ) + { + TInt err( KErrNone ); + + HBufC8* dataBuf = HBufC8::NewL( aDataSize ); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + TPckgBuf trId( aTrId ); + err = iSession.GetMsgData( trId, dataPtr ); + if ( !err ) + { + // Internalize API response data + RDesReadStream dataStream( dataPtr ); + CleanupClosePushL( dataStream ); + aInfo.InternalizeL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + } + CleanupStack::PopAndDestroy( dataBuf ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CHsCcApiClient::InternalizeContentInfoArrayL() +// ----------------------------------------------------------------------------- +// +TInt CHsCcApiClient::InternalizeContentInfoArrayL( + CHsContentInfoArray& aInfo, TUint32 aTrId, TUint32 aDataSize ) + { + TInt err( KErrNone ); + + HBufC8* dataBuf = HBufC8::NewL( aDataSize ); + CleanupStack::PushL( dataBuf ); + TPtr8 dataPtr( NULL, 0 ); + dataPtr.Set( dataBuf->Des() ); + TPckgBuf trId( aTrId ); + err = iSession.GetMsgData( trId, dataPtr ); + if ( !err ) + { + // Internalize API response data + RDesReadStream dataStream( dataPtr ); + CleanupClosePushL( dataStream ); + aInfo.InternalizeL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + } + CleanupStack::PopAndDestroy( dataBuf ); + + return err; + } + // End of file diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/hsccclient/hsccproviderclient/inc/hsccproviderclient.h --- a/contentcontrolsrv/hsccclient/hsccproviderclient/inc/hsccproviderclient.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccproviderclient/inc/hsccproviderclient.h Fri Mar 12 15:43:54 2010 +0200 @@ -106,84 +106,112 @@ * */ void HandleWidgetListReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleRegisterObserverNtfL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleUnregisterObserverNtfL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleAddWidgetReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleRemoveWidgetReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleViewListReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleAddViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleRemoveViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleActivateViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleActiveViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleAppListReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleActivateAppReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleActiveAppReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** * */ void HandleNotSupportedReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); /** @@ -196,6 +224,8 @@ * */ void SendRespL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ); private: // Data diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp --- a/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/hsccclient/hsccproviderclient/src/hsccproviderclient.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -102,12 +102,32 @@ void CHsCcProviderClient::RunL() { - if ( !iStatus.Int() ) + TInt err( iStatus.Int() ); + HBufC8* header( NULL ); + TPtr8 headerPtr( NULL, 0 ); + TUint32 sender( 0 ); + TUint32 receiver( 0 ); + if ( !err ) + { + // Read API request header + header = iApiHeader->AllocL(); + CleanupStack::PushL( header ); + headerPtr.Set( header->Des() ); + // Read sender + sender = iPckgSender(); + // Read receiver + receiver = iPckgReceiver(); + } + + // Receive next API request + WaitForApiReqL(); + + if ( !err ) { // Get received message header CCcSrvMsg* message = CCcSrvMsg::NewL(); CleanupStack::PushL( message ); - RDesReadStream stream( iApiHeaderPtr ); + RDesReadStream stream( headerPtr ); CleanupClosePushL( stream ); message->InternalizeHeaderL( stream ); CleanupStack::PopAndDestroy( &stream ); @@ -127,54 +147,54 @@ switch ( message->MsgId() ) { case ECcRegisterObserverNtf: - HandleRegisterObserverNtfL( *message ); + HandleRegisterObserverNtfL( sender, receiver, *message ); break; case ECcUnregisterObserverNtf: - HandleUnregisterObserverNtfL( *message ); + HandleUnregisterObserverNtfL( sender, receiver, *message ); break; case EHsCcWidgetListReq: - HandleWidgetListReqL( *message ); + HandleWidgetListReqL( sender, receiver, *message ); break; case EHsCcAddWidgetReq: - HandleAddWidgetReqL( *message ); + HandleAddWidgetReqL( sender, receiver, *message ); break; case EHsCcRemoveWidgetReq: - HandleRemoveWidgetReqL( *message ); + HandleRemoveWidgetReqL( sender, receiver, *message ); break; case EHsCcViewListReq: - HandleViewListReqL( *message ); + HandleViewListReqL( sender, receiver, *message ); break; case EHsCcAddViewReq: - HandleAddViewReqL( *message ); + HandleAddViewReqL( sender, receiver, *message ); break; case EHsCcRemoveViewReq: - HandleRemoveViewReqL( *message ); + HandleRemoveViewReqL( sender, receiver, *message ); break; case EHsCcActivateViewReq: - HandleActivateViewReqL( *message ); + HandleActivateViewReqL( sender, receiver, *message ); break; case EHsCcAppListReq: - HandleAppListReqL( *message ); + HandleAppListReqL( sender, receiver, *message ); break; case EHsCcActivateAppReq: - HandleActivateAppReqL( *message ); + HandleActivateAppReqL( sender, receiver, *message ); break; case EHsCcActiveAppReq: - HandleActiveAppReqL( *message ); + HandleActiveAppReqL( sender, receiver, *message ); break; case EHsCcActiveViewReq: - HandleActiveViewReqL( *message ); + HandleActiveViewReqL( sender, receiver, *message ); break; default: - HandleNotSupportedReqL( *message ); + HandleNotSupportedReqL( sender, receiver, *message ); break; } CleanupStack::PopAndDestroy( message ); } - - // Receive next API request - WaitForApiReqL(); - + if ( header ) + { + CleanupStack::PopAndDestroy( header ); + } } // ----------------------------------------------------------------------------- @@ -255,6 +275,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleRegisterObserverNtfL( + TUint32 /* aSender */, + TUint32 /* aReceiver */, CCcSrvMsg& /* aMessage */ ) { TUint32 observer = iPckgSender(); @@ -266,6 +288,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleUnregisterObserverNtfL( + TUint32 /* aSender */, + TUint32 /* aReceiver */, CCcSrvMsg& /* aMessage */ ) { TUint32 observer = iPckgSender(); @@ -284,12 +308,36 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleWidgetListReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { + + TInt err( KErrNone ); // Get widget list CHsContentInfoArray* widgets = CHsContentInfoArray::NewL(); CleanupStack::PushL( widgets ); - TInt err = iController.WidgetListL( *widgets ); + + if ( aMessage.DataSize() ) + { + // Internalize message data + RDesReadStream dataStream( aMessage.Data() ); + CleanupClosePushL( dataStream ); + CHsContentInfo* info = CHsContentInfo::NewL( dataStream ); + CleanupStack::PopAndDestroy( &dataStream ); + CleanupStack::PushL( info ); + + // Get list of widgets included in the defined + // application configuration or view + err = iController.WidgetListL( *info, *widgets ); + + CleanupStack::PopAndDestroy( info ); + } + else + { + // Get list of available widgets + err = iController.WidgetListL( *widgets ); + } // Create and send WidgetListResp CCcSrvMsg* message = CCcSrvMsg::NewL(); @@ -309,7 +357,7 @@ CleanupStack::PopAndDestroy( dataBuf ); } - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); CleanupStack::PopAndDestroy( widgets ); @@ -321,6 +369,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleAddWidgetReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { TInt err( KErrNone ); @@ -352,7 +402,7 @@ message->SetStatus( err ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); } @@ -362,6 +412,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleRemoveWidgetReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { TInt err( KErrNone ); @@ -393,7 +445,7 @@ message->SetStatus( err ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); } @@ -403,6 +455,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleViewListReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { // Get view list @@ -428,7 +482,7 @@ CleanupStack::PopAndDestroy( dataBuf ); } - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); CleanupStack::PopAndDestroy( views ); @@ -440,6 +494,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleAddViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { TInt err( KErrNone ); @@ -471,7 +527,7 @@ message->SetStatus( err ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); } @@ -481,6 +537,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleRemoveViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { TInt err( KErrNone ); @@ -512,7 +570,7 @@ message->SetStatus( err ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); } @@ -522,6 +580,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleActivateViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { TInt err( KErrNone ); @@ -553,7 +613,7 @@ message->SetStatus( err ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); } @@ -563,6 +623,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleActiveViewReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { // Get active view @@ -588,7 +650,7 @@ CleanupStack::PopAndDestroy( dataBuf ); } - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); CleanupStack::PopAndDestroy( view ); @@ -600,6 +662,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleAppListReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { // Get app list @@ -624,7 +688,7 @@ CleanupStack::PopAndDestroy( dataBuf ); } - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); CleanupStack::PopAndDestroy( apps ); @@ -636,6 +700,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleActivateAppReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { TInt err( KErrNone ); @@ -667,7 +733,7 @@ message->SetStatus( err ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); } @@ -677,6 +743,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleActiveAppReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { // Get active application info @@ -702,7 +770,7 @@ CleanupStack::PopAndDestroy( dataBuf ); } - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); CleanupStack::PopAndDestroy( app ); @@ -713,6 +781,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::HandleNotSupportedReqL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { // Create and send NotSupportedResp @@ -723,7 +793,7 @@ message->SetStatus( KErrNone ); message->SetData( KNullDesC8() ); - SendRespL( *message ); + SendRespL( aReceiver, aSender, *message ); CleanupStack::PopAndDestroy( message ); @@ -759,6 +829,8 @@ // ----------------------------------------------------------------------------- // void CHsCcProviderClient::SendRespL( + TUint32 aSender, + TUint32 aReceiver, CCcSrvMsg& aMessage ) { HBufC8* msgBuf = aMessage.MarshalL(); @@ -767,7 +839,9 @@ msgPtr.Set( msgBuf->Des() ); TPckgBuf provider( ECcHomescreen ); - iSession.Send( ECcApiResp, provider, iPckgReceiver, iPckgSender, msgPtr ); + TPckgBuf sender( aSender ); + TPckgBuf receiver( aReceiver ); + iSession.Send( ECcApiResp, provider, sender, receiver, msgPtr ); CleanupStack::PopAndDestroy( msgBuf ); } diff -r d0529222e3f0 -r bd874ee5e5e2 contentcontrolsrv/hscontentinfo/src/hscontentinfoarray.cpp --- a/contentcontrolsrv/hscontentinfo/src/hscontentinfoarray.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentcontrolsrv/hscontentinfo/src/hscontentinfoarray.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -32,9 +32,9 @@ // EXPORT_C CHsContentInfoArray* CHsContentInfoArray::NewL() { - CHsContentInfoArray* self = new ( ELeave ) CHsContentInfoArray(); - CleanupStack::PushL( self ); - self->ConstructL(); + CHsContentInfoArray* self = new ( ELeave ) CHsContentInfoArray(); + CleanupStack::PushL( self ); + self->ConstructL(); CleanupStack::Pop( self ); return self; } @@ -44,13 +44,13 @@ // ----------------------------------------------------------------------- // EXPORT_C CHsContentInfoArray* CHsContentInfoArray::NewL( RReadStream& aStream ) - { - CHsContentInfoArray* self = new ( ELeave ) CHsContentInfoArray(); - CleanupStack::PushL( self ); - self->InternalizeL( aStream ); - CleanupStack::Pop( self ); - return self; - } + { + CHsContentInfoArray* self = new ( ELeave ) CHsContentInfoArray(); + CleanupStack::PushL( self ); + self->InternalizeL( aStream ); + CleanupStack::Pop( self ); + return self; + } // ----------------------------------------------------------------------- // CHsContentInfoArray::ConstructL() @@ -74,7 +74,7 @@ // CHsContentInfoArray::~CHsContentInfoArray() { - iArray.ResetAndDestroy(); + iArray.ResetAndDestroy(); } // ----------------------------------------------------------------------- @@ -91,15 +91,15 @@ // ----------------------------------------------------------------------- // EXPORT_C void CHsContentInfoArray::ExternalizeL( RWriteStream& aStream ) - { - aStream.WriteInt16L( iArray.Count() ); - - for( int i = 0; i < iArray.Count(); i++ ) - { - CHsContentInfo* info = iArray[i]; - info->ExternalizeL( aStream ); - } - } + { + aStream.WriteInt16L( iArray.Count() ); + + for( int i = 0; i < iArray.Count(); i++ ) + { + CHsContentInfo* info = iArray[i]; + info->ExternalizeL( aStream ); + } + } // ----------------------------------------------------------------------- @@ -107,15 +107,15 @@ // ----------------------------------------------------------------------- // EXPORT_C void CHsContentInfoArray::InternalizeL( RReadStream& aStream ) - { - TInt count = aStream.ReadInt16L(); - - for( int i = 0; i < count; i++ ) - { - CHsContentInfo* info = CHsContentInfo::NewL( aStream ); - iArray.AppendL( info ); - } - } + { + TInt count = aStream.ReadInt16L(); + + for( int i = 0; i < count; i++ ) + { + CHsContentInfo* info = CHsContentInfo::NewL( aStream ); + iArray.AppendL( info ); + } + } // ----------------------------------------------------------------------- // CHsContentInfoArray::Size() @@ -123,7 +123,7 @@ // EXPORT_C TInt CHsContentInfoArray::Size( ) { - TInt size( 0 ); + TInt size( sizeof( TInt16 ) ); for ( TInt i = 0; i < iArray.Count(); i++ ) { size = size + iArray[ i ]->Size(); diff -r d0529222e3f0 -r bd874ee5e5e2 contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp --- a/contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/group/cpserver.mmp Fri Mar 12 15:43:54 2010 +0200 @@ -51,6 +51,8 @@ LIBRARY cputils.lib LIBRARY cpstorage.lib LIBRARY inetprotutil.lib +LIBRARY MemMan.lib + #ifdef CONTENT_PUBLISHER_DEBUG LIBRARY cpdebug.lib #endif diff -r d0529222e3f0 -r bd874ee5e5e2 contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpglobals.h Fri Mar 12 15:43:54 2010 +0200 @@ -44,6 +44,7 @@ const TInt KNameArgumentsLimit = 5; const TInt KThreadNameLimit = 64; const TUint KDisablePersist = 0x1000; +const TUint KDisableNotification = 0x2000; _LIT( KService, "CP Service" ); diff -r d0529222e3f0 -r bd874ee5e5e2 contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h --- a/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h Fri Feb 19 23:07:29 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/inc/cpserverdef.h Fri Mar 12 15:43:54 2010 +0200 @@ -71,7 +71,7 @@ const TUint KDescriptorPosition( 0); const TUint KReturnPosition( 1); -const TUint KInfoPosition( 2); +const TUint KOptionsPosition( 2); const TUint KTransactionPosition( 3); const TBool KActive( ETrue ); const TBool KInActive( EFalse ); diff -r d0529222e3f0 -r bd874ee5e5e2 contentpublishingsrv/contentpublishingserver/cpserver/src/cpserver.cpp --- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserver.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserver.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -15,7 +15,7 @@ * */ - +#include #include #include #include @@ -387,7 +387,12 @@ // TInt E32Main() { - return CCPServer::ThreadStart( ); + RAllocator* iAllocator = MemoryManager::SwitchToFastAllocator(); + + //Get the return value (needs to call CloseFastAllocator() before return) + TInt iReturnValue = CCPServer::ThreadStart( ); + MemoryManager::CloseFastAllocator(iAllocator); + return iReturnValue; } // End of File diff -r d0529222e3f0 -r bd874ee5e5e2 contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp --- a/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/contentpublishingsrv/contentpublishingserver/cpserver/src/cpserversession.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -284,13 +284,19 @@ { TInt error(KErrNone); CP_DEBUG( _L8("CCPServerSession::ExecuteActionSizeL()" ) ); + + TUint options = static_cast( aMessage.Int2() ); // 2 == KOptionsPosition + CCPLiwMap* map = UnpackFromClientLC( aMessage ); CLiwGenericParamList* paramList = CLiwGenericParamList::NewLC( ); CLiwDefaultList* list = CLiwDefaultList::NewLC(); error = iDataManager->GetActionL( *map, *paramList, list ); //we notify apart from action execution result. So in fact - //notification means there was an attempt to execute action - iDataManager->HandleChangeL( list ); + //notification means there was an attempt to execute action + if ( !( options & KDisableNotification ) ) + { + iDataManager->HandleChangeL( list ); + } User::LeaveIfError( error ); ExecuteL( *paramList ); CleanupStack::PopAndDestroy( list ); diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/homescreen_settings_api/bwins/hspluginsettings.def --- a/homescreenpluginsrv/homescreen_settings_api/bwins/hspluginsettings.def Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/homescreen_settings_api/bwins/hspluginsettings.def Fri Mar 12 15:43:54 2010 +0200 @@ -3,10 +3,10 @@ ?NewLC@CPluginMap@HSPluginSettingsIf@@SAPAV12@XZ @ 2 NONAME ; class HSPluginSettingsIf::CPluginMap * HSPluginSettingsIf::CPluginMap::NewLC(void) ?SetPluginUidL@CPluginMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 3 NONAME ; class HSPluginSettingsIf::CPluginMap & HSPluginSettingsIf::CPluginMap::SetPluginUidL(class TDesC8 const &) ?NewL@CItemMap@HSPluginSettingsIf@@SAPAV12@XZ @ 4 NONAME ; class HSPluginSettingsIf::CItemMap * HSPluginSettingsIf::CItemMap::NewL(void) - ?NewLC@CHomescreenSettings@HSPluginSettingsIf@@SAPAV12@ABVTDesC8@@0PAVMHomeScreenSettingsObserver@2@@Z @ 5 NONAME ; class HSPluginSettingsIf::CHomescreenSettings * HSPluginSettingsIf::CHomescreenSettings::NewLC(class TDesC8 const &, class TDesC8 const &, class HSPluginSettingsIf::MHomeScreenSettingsObserver *) - ?Name@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 6 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Name(void) const - ??1CItemMap@HSPluginSettingsIf@@UAE@XZ @ 7 NONAME ; HSPluginSettingsIf::CItemMap::~CItemMap(void) - ?NewLC@CHspsConfiguration@HSPluginSettingsIf@@SAPAV12@XZ @ 8 NONAME ; class HSPluginSettingsIf::CHspsConfiguration * HSPluginSettingsIf::CHspsConfiguration::NewLC(void) + ?Name@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 5 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Name(void) const + ??1CItemMap@HSPluginSettingsIf@@UAE@XZ @ 6 NONAME ; HSPluginSettingsIf::CItemMap::~CItemMap(void) + ?NewLC@CHspsConfiguration@HSPluginSettingsIf@@SAPAV12@XZ @ 7 NONAME ; class HSPluginSettingsIf::CHspsConfiguration * HSPluginSettingsIf::CHspsConfiguration::NewLC(void) + ?InitializeL@CHomescreenSettings@HSPluginSettingsIf@@SAXABVTDesC8@@@Z @ 8 NONAME ; void HSPluginSettingsIf::CHomescreenSettings::InitializeL(class TDesC8 const &) ?AddObjectMapL@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV12@PAVCObjectMap@2@@Z @ 9 NONAME ; class HSPluginSettingsIf::CHspsConfiguration & HSPluginSettingsIf::CHspsConfiguration::AddObjectMapL(class HSPluginSettingsIf::CObjectMap *) ?Value@CPropertyMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 10 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPropertyMap::Value(void) const ?PluginInfo@CHspsConfiguration@HSPluginSettingsIf@@QAEAAVCPluginInfo@2@XZ @ 11 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CHspsConfiguration::PluginInfo(void) @@ -22,43 +22,45 @@ ?PluginUid@CPluginMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 21 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginMap::PluginUid(void) const ?PluginId@CPluginMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 22 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginMap::PluginId(void) const ?SetMediaTypeL@CObjectMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 23 NONAME ; class HSPluginSettingsIf::CObjectMap & HSPluginSettingsIf::CObjectMap::SetMediaTypeL(class TDesC8 const &) - ?NewL@CHspsConfiguration@HSPluginSettingsIf@@SAPAV12@XZ @ 24 NONAME ; class HSPluginSettingsIf::CHspsConfiguration * HSPluginSettingsIf::CHspsConfiguration::NewL(void) - ?GetSettingsL@CHomescreenSettings@HSPluginSettingsIf@@UAEHABVTDesC8@@AAV?$RPointerArray@VCItemMap@HSPluginSettingsIf@@@@@Z @ 25 NONAME ; int HSPluginSettingsIf::CHomescreenSettings::GetSettingsL(class TDesC8 const &, class RPointerArray &) - ?NewLC@CPropertyMap@HSPluginSettingsIf@@SAPAV12@XZ @ 26 NONAME ; class HSPluginSettingsIf::CPropertyMap * HSPluginSettingsIf::CPropertyMap::NewLC(void) - ?NameL@CObjectMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 27 NONAME ; class TDesC8 const & HSPluginSettingsIf::CObjectMap::NameL(void) const - ?SetItemNameL@CItemMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 28 NONAME ; class HSPluginSettingsIf::CItemMap & HSPluginSettingsIf::CItemMap::SetItemNameL(class TDesC8 const &) - ?SetUidL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 29 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetUidL(class TDesC8 const &) - ?Properties@CItemMap@HSPluginSettingsIf@@QBEAAV?$RPointerArray@VCPropertyMap@HSPluginSettingsIf@@@@XZ @ 30 NONAME ; class RPointerArray & HSPluginSettingsIf::CItemMap::Properties(void) const - ?NewL@CPropertyMap@HSPluginSettingsIf@@SAPAV12@XZ @ 31 NONAME ; class HSPluginSettingsIf::CPropertyMap * HSPluginSettingsIf::CPropertyMap::NewL(void) - ?Type@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 32 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Type(void) const - ??1CPluginMap@HSPluginSettingsIf@@UAE@XZ @ 33 NONAME ; HSPluginSettingsIf::CPluginMap::~CPluginMap(void) + ?Instance@CHomescreenSettings@HSPluginSettingsIf@@SAPAV12@XZ @ 24 NONAME ; class HSPluginSettingsIf::CHomescreenSettings * HSPluginSettingsIf::CHomescreenSettings::Instance(void) + ?NewL@CHspsConfiguration@HSPluginSettingsIf@@SAPAV12@XZ @ 25 NONAME ; class HSPluginSettingsIf::CHspsConfiguration * HSPluginSettingsIf::CHspsConfiguration::NewL(void) + ?GetSettingsL@CHomescreenSettings@HSPluginSettingsIf@@UAEHABVTDesC8@@AAV?$RPointerArray@VCItemMap@HSPluginSettingsIf@@@@@Z @ 26 NONAME ; int HSPluginSettingsIf::CHomescreenSettings::GetSettingsL(class TDesC8 const &, class RPointerArray &) + ?NewLC@CPropertyMap@HSPluginSettingsIf@@SAPAV12@XZ @ 27 NONAME ; class HSPluginSettingsIf::CPropertyMap * HSPluginSettingsIf::CPropertyMap::NewLC(void) + ?NameL@CObjectMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 28 NONAME ; class TDesC8 const & HSPluginSettingsIf::CObjectMap::NameL(void) const + ?SetItemNameL@CItemMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 29 NONAME ; class HSPluginSettingsIf::CItemMap & HSPluginSettingsIf::CItemMap::SetItemNameL(class TDesC8 const &) + ?SetUidL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 30 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetUidL(class TDesC8 const &) + ?Properties@CItemMap@HSPluginSettingsIf@@QBEAAV?$RPointerArray@VCPropertyMap@HSPluginSettingsIf@@@@XZ @ 31 NONAME ; class RPointerArray & HSPluginSettingsIf::CItemMap::Properties(void) const + ?NewL@CPropertyMap@HSPluginSettingsIf@@SAPAV12@XZ @ 32 NONAME ; class HSPluginSettingsIf::CPropertyMap * HSPluginSettingsIf::CPropertyMap::NewL(void) + ?Type@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 33 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Type(void) const ?MediaType@CObjectMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 34 NONAME ; class TDesC8 const & HSPluginSettingsIf::CObjectMap::MediaType(void) const - ?SetPluginIdL@CPluginMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 35 NONAME ; class HSPluginSettingsIf::CPluginMap & HSPluginSettingsIf::CPluginMap::SetPluginIdL(class TDesC8 const &) - ?Resources@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV?$RPointerArray@VCObjectMap@HSPluginSettingsIf@@@@XZ @ 36 NONAME ; class RPointerArray & HSPluginSettingsIf::CHspsConfiguration::Resources(void) - ?Path@CObjectMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 37 NONAME ; class TDesC8 const & HSPluginSettingsIf::CObjectMap::Path(void) const - ?SetSettingsL@CHomescreenSettings@HSPluginSettingsIf@@UAEHABVTDesC8@@ABV?$RPointerArray@VCItemMap@HSPluginSettingsIf@@@@H@Z @ 38 NONAME ; int HSPluginSettingsIf::CHomescreenSettings::SetSettingsL(class TDesC8 const &, class RPointerArray const &, int) - ?Name@CPropertyMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 39 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPropertyMap::Name(void) const - ?NewL@CObjectMap@HSPluginSettingsIf@@SAPAV12@XZ @ 40 NONAME ; class HSPluginSettingsIf::CObjectMap * HSPluginSettingsIf::CObjectMap::NewL(void) - ?NewL@CPluginMap@HSPluginSettingsIf@@SAPAV12@XZ @ 41 NONAME ; class HSPluginSettingsIf::CPluginMap * HSPluginSettingsIf::CPluginMap::NewL(void) - ?SetPathL@CObjectMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 42 NONAME ; class HSPluginSettingsIf::CObjectMap & HSPluginSettingsIf::CObjectMap::SetPathL(class TDesC8 const &) - ?PluginMaps@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV?$RPointerArray@VCPluginMap@HSPluginSettingsIf@@@@XZ @ 43 NONAME ; class RPointerArray & HSPluginSettingsIf::CHspsConfiguration::PluginMaps(void) - ?NewL@CHomescreenSettings@HSPluginSettingsIf@@SAPAV12@ABVTDesC8@@0PAVMHomeScreenSettingsObserver@2@@Z @ 44 NONAME ; class HSPluginSettingsIf::CHomescreenSettings * HSPluginSettingsIf::CHomescreenSettings::NewL(class TDesC8 const &, class TDesC8 const &, class HSPluginSettingsIf::MHomeScreenSettingsObserver *) + ??1CPluginMap@HSPluginSettingsIf@@UAE@XZ @ 35 NONAME ; HSPluginSettingsIf::CPluginMap::~CPluginMap(void) + ?SetPluginIdL@CPluginMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 36 NONAME ; class HSPluginSettingsIf::CPluginMap & HSPluginSettingsIf::CPluginMap::SetPluginIdL(class TDesC8 const &) + ?Resources@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV?$RPointerArray@VCObjectMap@HSPluginSettingsIf@@@@XZ @ 37 NONAME ; class RPointerArray & HSPluginSettingsIf::CHspsConfiguration::Resources(void) + ?Path@CObjectMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 38 NONAME ; class TDesC8 const & HSPluginSettingsIf::CObjectMap::Path(void) const + ?SetSettingsL@CHomescreenSettings@HSPluginSettingsIf@@UAEHABVTDesC8@@ABV?$RPointerArray@VCItemMap@HSPluginSettingsIf@@@@H@Z @ 39 NONAME ; int HSPluginSettingsIf::CHomescreenSettings::SetSettingsL(class TDesC8 const &, class RPointerArray const &, int) + ?Name@CPropertyMap@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 40 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPropertyMap::Name(void) const + ?NewL@CObjectMap@HSPluginSettingsIf@@SAPAV12@XZ @ 41 NONAME ; class HSPluginSettingsIf::CObjectMap * HSPluginSettingsIf::CObjectMap::NewL(void) + ?NewL@CPluginMap@HSPluginSettingsIf@@SAPAV12@XZ @ 42 NONAME ; class HSPluginSettingsIf::CPluginMap * HSPluginSettingsIf::CPluginMap::NewL(void) + ?SetPathL@CObjectMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 43 NONAME ; class HSPluginSettingsIf::CObjectMap & HSPluginSettingsIf::CObjectMap::SetPathL(class TDesC8 const &) + ?PluginMaps@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV?$RPointerArray@VCPluginMap@HSPluginSettingsIf@@@@XZ @ 44 NONAME ; class RPointerArray & HSPluginSettingsIf::CHspsConfiguration::PluginMaps(void) ??1CPropertyMap@HSPluginSettingsIf@@UAE@XZ @ 45 NONAME ; HSPluginSettingsIf::CPropertyMap::~CPropertyMap(void) ?SetInterfaceL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 46 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetInterfaceL(class TDesC8 const &) ?ConfId@CHspsConfiguration@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 47 NONAME ; class TDesC8 const & HSPluginSettingsIf::CHspsConfiguration::ConfId(void) const ?Uid@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 48 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Uid(void) const - ?SetValueL@CPropertyMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 49 NONAME ; class HSPluginSettingsIf::CPropertyMap & HSPluginSettingsIf::CPropertyMap::SetValueL(class TDesC8 const &) - ?Interface@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 50 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Interface(void) const - ?SetTypeL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 51 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetTypeL(class TDesC8 const &) - ??1CHomescreenSettings@HSPluginSettingsIf@@UAE@XZ @ 52 NONAME ; HSPluginSettingsIf::CHomescreenSettings::~CHomescreenSettings(void) - ?SetNameL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 53 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetNameL(class TDesC8 const &) - ?NewL@CPluginInfo@HSPluginSettingsIf@@SAPAV12@XZ @ 54 NONAME ; class HSPluginSettingsIf::CPluginInfo * HSPluginSettingsIf::CPluginInfo::NewL(void) - ?SetItemIdL@CItemMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 55 NONAME ; class HSPluginSettingsIf::CItemMap & HSPluginSettingsIf::CItemMap::SetItemIdL(class TDesC8 const &) - ?NewLC@CItemMap@HSPluginSettingsIf@@SAPAV12@XZ @ 56 NONAME ; class HSPluginSettingsIf::CItemMap * HSPluginSettingsIf::CItemMap::NewLC(void) - ?AddItemMapL@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV12@PAVCItemMap@2@@Z @ 57 NONAME ; class HSPluginSettingsIf::CHspsConfiguration & HSPluginSettingsIf::CHspsConfiguration::AddItemMapL(class HSPluginSettingsIf::CItemMap *) - ??1CHspsConfiguration@HSPluginSettingsIf@@UAE@XZ @ 58 NONAME ; HSPluginSettingsIf::CHspsConfiguration::~CHspsConfiguration(void) - ?SetConfIdL@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 59 NONAME ; class HSPluginSettingsIf::CHspsConfiguration & HSPluginSettingsIf::CHspsConfiguration::SetConfIdL(class TDesC8 const &) - ?SetNameL@CPropertyMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 60 NONAME ; class HSPluginSettingsIf::CPropertyMap & HSPluginSettingsIf::CPropertyMap::SetNameL(class TDesC8 const &) - ?SetNameL@CObjectMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 61 NONAME ; class HSPluginSettingsIf::CObjectMap & HSPluginSettingsIf::CObjectMap::SetNameL(class TDesC8 const &) - ??1CObjectMap@HSPluginSettingsIf@@UAE@XZ @ 62 NONAME ; HSPluginSettingsIf::CObjectMap::~CObjectMap(void) + ?AddObserverL@CHomescreenSettings@HSPluginSettingsIf@@QAEXPAVMHomeScreenSettingsObserver@2@@Z @ 49 NONAME ; void HSPluginSettingsIf::CHomescreenSettings::AddObserverL(class HSPluginSettingsIf::MHomeScreenSettingsObserver *) + ?UnInitialize@CHomescreenSettings@HSPluginSettingsIf@@SAXXZ @ 50 NONAME ; void HSPluginSettingsIf::CHomescreenSettings::UnInitialize(void) + ?SetValueL@CPropertyMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 51 NONAME ; class HSPluginSettingsIf::CPropertyMap & HSPluginSettingsIf::CPropertyMap::SetValueL(class TDesC8 const &) + ?Interface@CPluginInfo@HSPluginSettingsIf@@QBEABVTDesC8@@XZ @ 52 NONAME ; class TDesC8 const & HSPluginSettingsIf::CPluginInfo::Interface(void) const + ?SetTypeL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 53 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetTypeL(class TDesC8 const &) + ?SetNameL@CPluginInfo@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 54 NONAME ; class HSPluginSettingsIf::CPluginInfo & HSPluginSettingsIf::CPluginInfo::SetNameL(class TDesC8 const &) + ?NewL@CPluginInfo@HSPluginSettingsIf@@SAPAV12@XZ @ 55 NONAME ; class HSPluginSettingsIf::CPluginInfo * HSPluginSettingsIf::CPluginInfo::NewL(void) + ?SetItemIdL@CItemMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 56 NONAME ; class HSPluginSettingsIf::CItemMap & HSPluginSettingsIf::CItemMap::SetItemIdL(class TDesC8 const &) + ?NewLC@CItemMap@HSPluginSettingsIf@@SAPAV12@XZ @ 57 NONAME ; class HSPluginSettingsIf::CItemMap * HSPluginSettingsIf::CItemMap::NewLC(void) + ?AddItemMapL@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV12@PAVCItemMap@2@@Z @ 58 NONAME ; class HSPluginSettingsIf::CHspsConfiguration & HSPluginSettingsIf::CHspsConfiguration::AddItemMapL(class HSPluginSettingsIf::CItemMap *) + ??1CHspsConfiguration@HSPluginSettingsIf@@UAE@XZ @ 59 NONAME ; HSPluginSettingsIf::CHspsConfiguration::~CHspsConfiguration(void) + ?RemoveObserver@CHomescreenSettings@HSPluginSettingsIf@@QAEXPAVMHomeScreenSettingsObserver@2@@Z @ 60 NONAME ; void HSPluginSettingsIf::CHomescreenSettings::RemoveObserver(class HSPluginSettingsIf::MHomeScreenSettingsObserver *) + ?SetConfIdL@CHspsConfiguration@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 61 NONAME ; class HSPluginSettingsIf::CHspsConfiguration & HSPluginSettingsIf::CHspsConfiguration::SetConfIdL(class TDesC8 const &) + ?SetNameL@CPropertyMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 62 NONAME ; class HSPluginSettingsIf::CPropertyMap & HSPluginSettingsIf::CPropertyMap::SetNameL(class TDesC8 const &) + ?SetNameL@CObjectMap@HSPluginSettingsIf@@QAEAAV12@ABVTDesC8@@@Z @ 63 NONAME ; class HSPluginSettingsIf::CObjectMap & HSPluginSettingsIf::CObjectMap::SetNameL(class TDesC8 const &) + ??1CObjectMap@HSPluginSettingsIf@@UAE@XZ @ 64 NONAME ; HSPluginSettingsIf::CObjectMap::~CObjectMap(void) diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/homescreen_settings_api/eabi/hspluginsettings.def --- a/homescreenpluginsrv/homescreen_settings_api/eabi/hspluginsettings.def Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/homescreen_settings_api/eabi/hspluginsettings.def Fri Mar 12 15:43:54 2010 +0200 @@ -44,13 +44,13 @@ _ZN18HSPluginSettingsIf18CHspsConfigurationD0Ev @ 43 NONAME _ZN18HSPluginSettingsIf18CHspsConfigurationD1Ev @ 44 NONAME _ZN18HSPluginSettingsIf18CHspsConfigurationD2Ev @ 45 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettings12GetSettingsLERK6TDesC8R13RPointerArrayINS_8CItemMapEE @ 46 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettings12SetSettingsLERK6TDesC8RK13RPointerArrayINS_8CItemMapEEi @ 47 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettings4NewLERK6TDesC8S3_PNS_27MHomeScreenSettingsObserverE @ 48 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettings5NewLCERK6TDesC8S3_PNS_27MHomeScreenSettingsObserverE @ 49 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettingsD0Ev @ 50 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettingsD1Ev @ 51 NONAME - _ZN18HSPluginSettingsIf19CHomescreenSettingsD2Ev @ 52 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings11InitializeLERK6TDesC8 @ 46 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings12AddObserverLEPNS_27MHomeScreenSettingsObserverE @ 47 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings12GetSettingsLERK6TDesC8R13RPointerArrayINS_8CItemMapEE @ 48 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings12SetSettingsLERK6TDesC8RK13RPointerArrayINS_8CItemMapEEi @ 49 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings12UnInitializeEv @ 50 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings14RemoveObserverEPNS_27MHomeScreenSettingsObserverE @ 51 NONAME + _ZN18HSPluginSettingsIf19CHomescreenSettings8InstanceEv @ 52 NONAME _ZN18HSPluginSettingsIf8CItemMap10SetItemIdLERK6TDesC8 @ 53 NONAME _ZN18HSPluginSettingsIf8CItemMap12SetItemNameLERK6TDesC8 @ 54 NONAME _ZN18HSPluginSettingsIf8CItemMap15AddPropertyMapLEPNS_12CPropertyMapE @ 55 NONAME @@ -80,15 +80,13 @@ _ZTIN18HSPluginSettingsIf11CPluginInfoE @ 79 NONAME _ZTIN18HSPluginSettingsIf12CPropertyMapE @ 80 NONAME _ZTIN18HSPluginSettingsIf18CHspsConfigurationE @ 81 NONAME - _ZTIN18HSPluginSettingsIf19CHomescreenSettingsE @ 82 NONAME - _ZTIN18HSPluginSettingsIf8CItemMapE @ 83 NONAME - _ZTVN18HSPluginSettingsIf10CObjectMapE @ 84 NONAME - _ZTVN18HSPluginSettingsIf10CPluginMapE @ 85 NONAME - _ZTVN18HSPluginSettingsIf11CPluginInfoE @ 86 NONAME - _ZTVN18HSPluginSettingsIf12CPropertyMapE @ 87 NONAME - _ZTVN18HSPluginSettingsIf18CHspsConfigurationE @ 88 NONAME - _ZTVN18HSPluginSettingsIf19CHomescreenSettingsE @ 89 NONAME - _ZTVN18HSPluginSettingsIf8CItemMapE @ 90 NONAME - _ZThn8_N18HSPluginSettingsIf19CHomescreenSettings12GetSettingsLERK6TDesC8R13RPointerArrayINS_8CItemMapEE @ 91 NONAME - _ZThn8_N18HSPluginSettingsIf19CHomescreenSettings12SetSettingsLERK6TDesC8RK13RPointerArrayINS_8CItemMapEEi @ 92 NONAME + _ZTIN18HSPluginSettingsIf8CItemMapE @ 82 NONAME + _ZTVN18HSPluginSettingsIf10CObjectMapE @ 83 NONAME + _ZTVN18HSPluginSettingsIf10CPluginMapE @ 84 NONAME + _ZTVN18HSPluginSettingsIf11CPluginInfoE @ 85 NONAME + _ZTVN18HSPluginSettingsIf12CPropertyMapE @ 86 NONAME + _ZTVN18HSPluginSettingsIf18CHspsConfigurationE @ 87 NONAME + _ZTVN18HSPluginSettingsIf8CItemMapE @ 88 NONAME + _ZThn8_N18HSPluginSettingsIf19CHomescreenSettings12GetSettingsLERK6TDesC8R13RPointerArrayINS_8CItemMapEE @ 89 NONAME + _ZThn8_N18HSPluginSettingsIf19CHomescreenSettings12SetSettingsLERK6TDesC8RK13RPointerArrayINS_8CItemMapEEi @ 90 NONAME diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/homescreen_settings_api/src/hspluginsettings.cpp --- a/homescreenpluginsrv/homescreen_settings_api/src/hspluginsettings.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/homescreen_settings_api/src/hspluginsettings.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -23,19 +23,14 @@ #include #include "hspsconfiguration.h" -//#include "pluginmap.h" #include "itemmap.h" #include "propertymap.h" -//#include "objectmap.h" -//#include "plugininfo.h" #include #include _LIT8( KHSPS, "Service.HSPS" ); _LIT8( KHSPSConfigurationIf, "IConfiguration" ); - - _LIT8( KHSPSCommandGetPluginConf, "GetPluginConf" ); _LIT8( KHSPSSetPluginSettings, "SetPluginSettings" ); _LIT8( KPluginConfKey, "pluginConf" ); @@ -46,7 +41,6 @@ _LIT8( KKeyStoringParams, "storingParams" ); - _LIT8( KKeyStorePluginRefence, "storePluginConf" ); _LIT8( KKeyStoreAppConf, "storeAppConf" ); @@ -58,17 +52,115 @@ _LIT8( KRequestNotification, "RequestNotification" ); +_LIT8( KSettingsChanged, "PluginSettingsChanged" ); -_LIT8( KSettingsChanged, "PluginSettingsChanged" ); namespace HSPluginSettingsIf{ +NONSHARABLE_CLASS( CTlsEntry ): public CBase + { +public: + /** + * Instance to home screen settings. + */ + CHomescreenSettings* iInstance; + + /** + * Reference count. + */ + TInt iRefCount; + }; +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C CHomescreenSettings* CHomescreenSettings::Instance() + { + CHomescreenSettings* instance = NULL; + + CTlsEntry* entry = static_cast( Dll::Tls() ); + if( entry ) + { + instance = entry->iInstance; + } + + return instance; + } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -CHomescreenSettings::CHomescreenSettings(MHomeScreenSettingsObserver* aObserver, const TDesC8& aPluginId ) - : iObserver( aObserver ), iPluginId( aPluginId ) +EXPORT_C void CHomescreenSettings::InitializeL( const TDesC8& aAppUid ) + { + CTlsEntry* entry = static_cast( Dll::Tls() ); + + if( !entry ) + { + entry = new (ELeave) CTlsEntry(); + entry->iInstance = NULL; + entry->iRefCount = 1; + + CleanupStack::PushL( entry ); + entry->iInstance = CHomescreenSettings::NewL( aAppUid ); + CleanupStack::Pop( entry ); + + Dll::SetTls( entry ); + } + else + { + entry->iRefCount++; + } + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C void CHomescreenSettings::UnInitialize() + { + CTlsEntry* entry = static_cast( Dll::Tls() ); + + if( !entry ) + { + return; + } + + entry->iRefCount--; + + if( entry->iRefCount == 0 ) + { + delete entry->iInstance; + entry->iInstance = NULL; + delete entry; + Dll::SetTls( NULL ); + } + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C void CHomescreenSettings::AddObserverL( MHomeScreenSettingsObserver* aObserver ) + { + if( iObservers.Find( aObserver ) == KErrNotFound ) + { + iObservers.AppendL( aObserver ); + } + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +EXPORT_C void CHomescreenSettings::RemoveObserver( MHomeScreenSettingsObserver* aObserver ) + { + const TInt index = iObservers.Find( aObserver ); + if( index != KErrNotFound ) + { + iObservers.Remove( index ); + } + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CHomescreenSettings::CHomescreenSettings() { } @@ -118,48 +210,42 @@ inParamList.Reset(); outParamList.Reset(); - if( iObserver ) - { - iTransactionId = -1; - iHspsInterface->ExecuteCmdL( KRequestNotification, - inParamList, - outParamList, - KLiwOptASyncronous, - this ); - const TLiwGenericParam* outParam( NULL ); - - TInt pos( 0 ); - outParam = outParamList.FindFirst( pos, _L8("status") ); - - if ( outParam ) - { - TInt retval; - retval = outParam->Value().AsTInt32(); - if(retval == KErrNone ) - { - pos = 0; - outParam = outParamList.FindFirst( pos, _L8("TransactionID") ); - if( outParam ) - { - retval = outParam->Value().AsTInt32(); - iTransactionId = retval; - } - } - - } - + iTransactionId = -1; + iHspsInterface->ExecuteCmdL( KRequestNotification, + inParamList, + outParamList, + KLiwOptASyncronous, + this ); + + const TLiwGenericParam* outParam( NULL ); + + pos = 0; + outParam = outParamList.FindFirst( pos, _L8("status") ); + + if( outParam ) + { + TInt retval; + retval = outParam->Value().AsTInt32(); + if( retval == KErrNone ) + { + pos = 0; + outParam = outParamList.FindFirst( pos, _L8( "TransactionID" ) ); + if( outParam ) + { + retval = outParam->Value().AsTInt32(); + iTransactionId = retval; + } + } } } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -EXPORT_C CHomescreenSettings* CHomescreenSettings::NewL( - const TDesC8& aAppUid, - const TDesC8& aPluginId, - MHomeScreenSettingsObserver* aObserver) +CHomescreenSettings* CHomescreenSettings::NewL( + const TDesC8& aAppUid ) { - CHomescreenSettings* self = CHomescreenSettings::NewLC(aAppUid, aPluginId, aObserver); + CHomescreenSettings* self = CHomescreenSettings::NewLC( aAppUid ); CleanupStack::Pop( self ); return self; } @@ -167,22 +253,23 @@ // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -EXPORT_C CHomescreenSettings* CHomescreenSettings::NewLC( - const TDesC8& aAppUid, - const TDesC8& aPluginId, - MHomeScreenSettingsObserver* aObserver) - { - CHomescreenSettings* self = new( ELeave ) CHomescreenSettings( aObserver, aPluginId ); +CHomescreenSettings* CHomescreenSettings::NewLC( + const TDesC8& aAppUid ) + { + CHomescreenSettings* self = new( ELeave ) CHomescreenSettings(); CleanupStack::PushL( self ); - self->ConstructL(aAppUid); + self->ConstructL( aAppUid ); + return self; } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -EXPORT_C CHomescreenSettings::~CHomescreenSettings() +CHomescreenSettings::~CHomescreenSettings() { + iObservers.Reset(); + if( iHspsInterface ) { // Close interface @@ -202,10 +289,6 @@ delete iServiceHandler; } - - - - // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // @@ -529,7 +612,7 @@ { TInt retval( KErrNone ); - if( iObserver && iTransactionId == aCmdId ) + if( iTransactionId == aCmdId && iObservers.Count() > 0 ) { const TLiwGenericParam* outParam( NULL ); @@ -566,16 +649,16 @@ variant = outParam->Value(); const CLiwMap* notifMap( variant.AsMap() ); - + if ( notifMap->FindL( _L8("event"), variant ) ) { event = variant.AsData().AllocLC(); pushCount++; } - + variant.Reset(); - if ( event->Des().Compare( KSettingsChanged ) == 0 ) + if ( event && event->Des().Compare( KSettingsChanged ) == 0 ) { if( notifMap->FindL( _L8("name"), variant ) ) { @@ -610,20 +693,19 @@ HBufC8* pluginId( NULL ); pluginId = variant.AsData().AllocLC(); - if( pluginId->Des().Compare(iPluginId)== 0 ) + for( TInt i = 0; i < iObservers.Count(); i++ ) { - retval = iObserver->SettingsChangedL( + iObservers[i]->SettingsChangedL( ( event ) ? *event : KNullDesC8(), ( pluginName ) ? *pluginName : KNullDesC8(), ( pluginUid ) ? *pluginUid : KNullDesC8(), - ( pluginId ) ? * pluginId : KNullDesC8() ); - } + ( pluginId ) ? *pluginId : KNullDesC8() ); + } + CleanupStack::PopAndDestroy( pluginId ); - variant.Reset(); - - } - + variant.Reset(); + } } } @@ -679,11 +761,10 @@ } } - } - + } return retval; - } + } } //End of file diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsdom/group/hspsdomdocument.mmp --- a/homescreenpluginsrv/hspsdom/group/hspsdomdocument.mmp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsdom/group/hspsdomdocument.mmp Fri Mar 12 15:43:54 2010 +0200 @@ -32,6 +32,7 @@ SOURCE hspsdomlist.cpp SOURCE hspsdomdepthiterator.cpp SOURCE hspsdomstringpool.cpp +SOURCE hspsdomstringpooloptimizer.cpp USERINCLUDE . USERINCLUDE ../inc diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsdom/src/hspsdomstringpool.cpp --- a/homescreenpluginsrv/hspsdom/src/hspsdomstringpool.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsdom/src/hspsdomstringpool.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -20,42 +20,8 @@ // INCLUDE FILES #include "hspsdomstringpool.h" +// ============================ LOCAL FUNCTIONS ================================ -// ============================ LOCAL FUNCTIONS ================================ -// ----------------------------------------------------------------------------- -// Adds string to string pool. If string doesn't appear yet, it is added to -// the string pool and index to pool is returned. -// @param aString String to add -// @param aArray A pool which holds strings -// @return Index to string pool -// ----------------------------------------------------------------------------- -// -LOCAL_C TInt AddToStringPoolL( const TDesC8& aString, RPointerArray& aArray ) - { - TBool found( EFalse ); - TInt index( 0 ); - - TInt count( aArray.Count() ); - for (; index < count && !found; ) - { - if ( aArray[ index ]->Des().Compare( aString ) == 0 ) - { - found = ETrue; - } - else - { - index++; - } - } - if ( !found ) - { - HBufC8* tmp = aString.AllocLC(); - aArray.AppendL( tmp ); - CleanupStack::Pop( tmp ); - index = aArray.Count()-1; //Last item - } - return index; - } // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- // ChspsDomStringPool::ChspsDomStringPool @@ -63,7 +29,8 @@ // might leave. // ----------------------------------------------------------------------------- // -ChspsDomStringPool::ChspsDomStringPool() +ChspsDomStringPool::ChspsDomStringPool( const TBool aAllowDuplicates ) : + iAllowDuplicates( aAllowDuplicates ) { } @@ -81,9 +48,10 @@ // Two-phased constructor. // ----------------------------------------------------------------------------- // -ChspsDomStringPool* ChspsDomStringPool::NewL() +ChspsDomStringPool* ChspsDomStringPool::NewL( const TBool aAllowDuplicates ) { - ChspsDomStringPool* self = new( ELeave ) ChspsDomStringPool; + ChspsDomStringPool* self = + new( ELeave ) ChspsDomStringPool( aAllowDuplicates ); CleanupStack::PushL( self ); self->ConstructL(); @@ -98,9 +66,10 @@ // Two-phased stream constructor. // ----------------------------------------------------------------------------- // -ChspsDomStringPool* ChspsDomStringPool::NewL( RReadStream& aStream ) +ChspsDomStringPool* ChspsDomStringPool::NewL( RReadStream& aStream, + const TBool aAllowDuplicates ) { - ChspsDomStringPool* self = new( ELeave ) ChspsDomStringPool; + ChspsDomStringPool* self = new( ELeave ) ChspsDomStringPool( aAllowDuplicates ); CleanupStack::PushL( self ); aStream >> *self; CleanupStack::Pop(self); @@ -116,6 +85,7 @@ ChspsDomStringPool::~ChspsDomStringPool() { iStringPool.ResetAndDestroy(); + iStringPoolOptimizer.Close(); } // ----------------------------------------------------------------------------- @@ -123,15 +93,23 @@ // ----------------------------------------------------------------------------- // ChspsDomStringPool* ChspsDomStringPool::CloneL() - { - ChspsDomStringPool* clone = ChspsDomStringPool::NewL(); + { + ChspsDomStringPool* clone = NULL; + if( iAllowDuplicates ) + { + clone = ChspsDomStringPool::NewL( ETrue ); + } + else + { + clone = ChspsDomStringPool::NewL( EFalse ); + } CleanupStack::PushL( clone ); TInt count( iStringPool.Count() ); - for ( TInt i=0; iDes().AllocLC(); - clone->iStringPool.AppendL( tmp ); + clone->DoAddStringL( tmp ); CleanupStack::Pop( tmp ); } CleanupStack::Pop( clone ); @@ -139,26 +117,77 @@ } // ----------------------------------------------------------------------------- -// ChspsDomNode::AddStringL +// ChspsDomStringPool::AddStringL // ----------------------------------------------------------------------------- // EXPORT_C TInt ChspsDomStringPool::AddStringL( const TDesC8& aString ) - { - return AddToStringPoolL( aString, iStringPool ); + { + TInt index = iStringPoolOptimizer.GetIndex( aString ); + + if( index == KErrNotFound ) + { + HBufC8* string = aString.AllocLC(); + index = DoAddStringL( string ); + CleanupStack::Pop( string ); + } + + return index; } // ----------------------------------------------------------------------------- -// ChspsDomNode::String +// ChspsDomStringPool::AddStringL +// ----------------------------------------------------------------------------- +// +TInt ChspsDomStringPool::AddStringL( HBufC8* aString ) + { + if( !aString ) + { + User::Leave( KErrArgument ); + } + + TInt index = iStringPoolOptimizer.GetIndex( *aString ); + + if( index == KErrNotFound ) + { + index = DoAddStringL( aString ); + } + else + { + delete aString; + } + + return index; + } + +// ----------------------------------------------------------------------------- +// ChspsDomStringPool::AddStringL +// ----------------------------------------------------------------------------- +// +void ChspsDomStringPool::AddAllL( ChspsDomStringPool& aStringPool ) + { + const TInt count = aStringPool.Count(); + for( TInt i = 0; i < count; i++ ) + { + AddStringL( aStringPool.String( i ) ); + } + } + +// ----------------------------------------------------------------------------- +// ChspsDomStringPool::String // ----------------------------------------------------------------------------- // const TDesC8& ChspsDomStringPool::String( const TInt aStringRef ) - { - if ( aStringRef < iStringPool.Count() ) + { + if( aStringRef >= 0 && aStringRef < iStringPool.Count() ) + { return (*iStringPool[ aStringRef ]); + } else + { return KNullDesC8; + } } - + // ----------------------------------------------------------------------------- // ChspsDomStringPool::Size // ----------------------------------------------------------------------------- @@ -179,6 +208,15 @@ } // ----------------------------------------------------------------------------- +// ChspsDomStringPool::Count +// ----------------------------------------------------------------------------- +// +TInt ChspsDomStringPool::Count() const + { + return iStringPool.Count(); + } + +// ----------------------------------------------------------------------------- // ChspsDomStringPool::ExternalizeL // ----------------------------------------------------------------------------- // @@ -201,15 +239,39 @@ void ChspsDomStringPool::InternalizeL( RReadStream& aStream ) { TInt len(0); - TInt16 count ( aStream.ReadInt16L() ); - + TInt16 count ( aStream.ReadInt16L() ); + for ( TInt i=0; i 0 ) + { + const TInt estimate = FindInsertionIndexEstimate( + aEntry.iString, + 0, + iEntries.Count() - 1 ); + + if( estimate != KErrNotFound ) + { + for( TInt i = estimate; i < iEntries.Count(); i++ ) + { + if( aEntry.iString.Compare( iEntries[i].iString ) < 0 ) + { + positionFound = ETrue; + iEntries.InsertL( aEntry, i ); + break; + } + } + } + } + + if( !positionFound ) + { + iEntries.AppendL( aEntry ); + } + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::ThspsDomStringPoolOptimizerGetIndex +// ----------------------------------------------------------------------------- +// +TInt ThspsDomStringPoolOptimizer::GetIndex( const TDesC8& aString ) + { + if( iEntries.Count() == 0 ) + { + return KErrNotFound; + } + + TInt index = FindEntry( aString, 0, iEntries.Count() - 1 ); + if( index >= 0 && index < iEntries.Count() ) + { + return iEntries[index].iIndex; + } + else + { + // Error code. + return index; + } + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::Close +// ----------------------------------------------------------------------------- +// +void ThspsDomStringPoolOptimizer::Close() + { + iEntries.Close(); + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::Count +// ----------------------------------------------------------------------------- +// +TInt ThspsDomStringPoolOptimizer::Count() + { + return iEntries.Count(); + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::Entry +// ----------------------------------------------------------------------------- +// +ThspsDomStringPoolOptimizerEntry& ThspsDomStringPoolOptimizer::Entry( + const TInt aIndex ) + { + return iEntries[ aIndex ]; + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::Reset +// ----------------------------------------------------------------------------- +// +void ThspsDomStringPoolOptimizer::Reset() + { + iEntries.Reset(); + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::FindEntry +// ----------------------------------------------------------------------------- +// +TInt ThspsDomStringPoolOptimizer::FindEntry( const TDesC8& aString, + const TInt aLeft, + const TInt aRight ) + { + if( aLeft > aRight ) + { + return KErrNotFound; + } + + const TUint middle = ( aLeft + aRight ) >> 1; // >> 1 means "divided by two". + ThspsDomStringPoolOptimizerEntry& entryAtMiddle = iEntries[ middle ]; + const TInt comparisonResult = aString.Compare( entryAtMiddle.iString ); + + if( comparisonResult > 0 ) + { + return FindEntry( aString, middle + 1, aRight); + } + else if( comparisonResult < 0 ) + { + return FindEntry( aString, aLeft, middle - 1 ); + } + else + { + return middle; + } + } + +// ----------------------------------------------------------------------------- +// ThspsDomStringPoolOptimizer::FindEntry +// ----------------------------------------------------------------------------- +// +TInt ThspsDomStringPoolOptimizer::FindInsertionIndexEstimate( const TDesC8& aString, + const TInt aLeft, + const TInt aRight ) + { + if( ( aRight - aLeft ) <= KMaxEstimateThreshold ) + { + return aLeft; + } + + const TUint middle = ( aLeft + aRight ) >> 1; + + ThspsDomStringPoolOptimizerEntry& entryAtMiddle = iEntries[ middle ]; + const TInt comparisonResult = aString.Compare( entryAtMiddle.iString ); + + if( comparisonResult > 0 ) + { + return FindInsertionIndexEstimate( aString, middle, aRight); + } + else if( comparisonResult < 0 ) + { + return FindInsertionIndexEstimate( aString, aLeft, middle ); + } + else + { + // Should not go here. There should be only one of a kind in the list. + return KErrNotFound; + } + } + +// End of File diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp --- a/homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/group/hspsthemeserver.mmp Fri Mar 12 15:43:54 2010 +0200 @@ -81,6 +81,8 @@ LIBRARY hspsdomdocument.lib LIBRARY hspsdefinitionengineinterface.lib LIBRARY ecom.lib // definition engine +LIBRARY MemMan.lib + #ifdef _hsps_DEBUG_ LIBRARY flogger.lib #endif // _hsps_DEBUG_ diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h --- a/homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsthemeserver.h Fri Mar 12 15:43:54 2010 +0200 @@ -209,6 +209,7 @@ class ChspsSecurityEnforcer; class ChspsRomInstaller; class ChspsAutoInstaller; +class ChspsThemeServerSession; #ifdef HSPS_LOG_ACTIVE class ChspsLogBus; @@ -396,15 +397,21 @@ /** * AddSession + * + * @param aSession Session that is added. Ownership not transferred!. + * * @since S60 3.1 */ - void AddSession(); + void AddSession( ChspsThemeServerSession* aSession ); /** * DropSession + * + * @param aSession Session that is dropped. Ownership not transferred!. + * * @since S60 3.1 */ - void DropSession(); + void DropSession( ChspsThemeServerSession* aSession ); public: // public functions @@ -997,11 +1004,7 @@ void ActivateRootConfigurationsL(); #endif // defined(WINSCW) - - -private: - TInt iSessionCount; - + #ifdef _hsps_SERVER_SHUTDOWN_ENABLED_ CShutdown* iShutdown; #endif // _hsps_SERVER_SHUTDOWN_ENABLED_ @@ -1084,6 +1087,8 @@ */ ChspsLogBus* iLogBus; #endif + + RPointerArray iSessions; // Sessions not owned! }; #endif //__hspsTHEMESERVER_H__ diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsmanager/inc/hspsthemeserversession.h --- a/homescreenpluginsrv/hspsmanager/inc/hspsthemeserversession.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/inc/hspsthemeserversession.h Fri Mar 12 15:43:54 2010 +0200 @@ -63,6 +63,41 @@ * @return Reference to RFs instance */ RFs& FileSystem(); + + /** + * Return whether icon file copy required. + * + * @return TBool ETrue if icon file copy is required. Otherwise false. + */ + TBool IconFileCopyRequired() const; + + /** + * Set icon file copy requirement flag. + * + * @param aCopyRequired Value to be set. + */ + void SetIconFileCopyRequired( const TBool aCopyRequired ); + + /** + * Return whether resource file copy required. + * + * @return TBool ETrue if icon file copy is required. Otherwise false. + */ + TBool ResourceFileCopyRequired() const; + + /** + * Set resource file copy requirement flag. + * + * @param aCopyRequired Value to be set. + */ + void SetResourceFileCopyRequired( const TBool aCopyRequired ); + + /** + * Get app uid of session + * + * @return App uid. + */ + TInt AppUid() const; private: @@ -304,6 +339,17 @@ TBool iHoldingResources; TInt iAppUid; + + /** + * Boolean to indicate that icon files need to be copied. + */ + TBool iIconFileCopyRequired; + + /** + * Boolean to indicate that resource files need to be copied. + */ + TBool iResourceFileCopyRequired; + #ifdef HSPS_LOG_ACTIVE /** * Log bus. diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsthemeserver.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -19,6 +19,7 @@ #define __INCLUDE_CAPABILITY_NAMES__ // INCLUDE FILES +#include #include #include #include @@ -179,6 +180,8 @@ // TInt E32Main() { + RAllocator* iAllocator = MemoryManager::SwitchToFastAllocator(); + __UHEAP_MARK; CTrapCleanup* cleanup=CTrapCleanup::New(); TInt r=KErrNoMemory; @@ -188,6 +191,9 @@ delete cleanup; } __UHEAP_MARKEND; + + MemoryManager::CloseFastAllocator(iAllocator); + return r; } @@ -398,6 +404,8 @@ delete iLogBus; iLogBus = NULL; #endif + + iSessions.Reset(); } #ifdef _hsps_SERVER_SHUTDOWN_ENABLED_ @@ -489,9 +497,14 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -void ChspsThemeServer::AddSession() +void ChspsThemeServer::AddSession( ChspsThemeServerSession* aSession ) { - iSessionCount++; + if( aSession == NULL ) + { + return; + } + + iSessions.Append( aSession ); #ifdef _hsps_SERVER_SHUTDOWN_ENABLED_ if( iShutdown->IsActive() ) @@ -513,12 +526,16 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -void ChspsThemeServer::DropSession() +void ChspsThemeServer::DropSession( ChspsThemeServerSession* aSession ) { - iSessionCount--; + const TInt index = iSessions.Find( aSession ); + if( index != KErrNotFound ) + { + iSessions.Remove( index ); + } #ifdef _hsps_SERVER_SHUTDOWN_ENABLED_ - if( iSessionCount == 0 ) + if( iSessions.Count() == 0 ) { iShutdown->Cancel(); iShutdown->Start(); @@ -577,7 +594,20 @@ #ifdef HSPS_LOG_ACTIVE iLogBus->LogText( _L( "--------------------------------------------------------" ) ); #endif - + + if( aRepositoryInfo.iEventType & EhspsODTUpdated || + aRepositoryInfo.iEventType & EhspsODTModified || + aRepositoryInfo.iEventType & EhspsPluginReplaced ) + { + for( TInt i = 0; i < iSessions.Count(); i++ ) + { + if( iSessions[i]->AppUid() == aRepositoryInfo.iAppUid ) + { + iSessions[i]->SetResourceFileCopyRequired( ETrue ); + } + } + } + // If header cache should be updated from files in the Plug-in Repository if (mask & EhspsCacheUpdate) { @@ -3371,6 +3401,16 @@ { // Invalid configuration state.Set( KConfStateError ); + // Delete related resource files + const TInt count = aOdt.ResourceCount(); + for( TInt j( 0 ); j < count; j++ ) + { + ChspsResource& resource = aOdt.ResourceL( j ); + if( resource.ConfigurationUid() == uids[ i ] ) + { + aOdt.DeleteResourceL( j ); + } + } } else if ( state.CompareF( KConfStateError ) != 0 ) { diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsmanager/src/hspsthemeserversession.cpp --- a/homescreenpluginsrv/hspsmanager/src/hspsthemeserversession.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsmanager/src/hspsthemeserversession.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -49,9 +49,11 @@ // ----------------------------------------------------------------------------- // ChspsThemeServerSession::ChspsThemeServerSession( - const TInt aAppUid ) + const TInt aAppUid ) : + iAppUid( aAppUid ), + iIconFileCopyRequired( ETrue ), + iResourceFileCopyRequired( ETrue ) { - iAppUid = aAppUid; } // ----------------------------------------------------------------------------- @@ -68,7 +70,7 @@ iLogBus->LogText( _L( "--------------------------------------------------------" ) ); #endif - Server().AddSession(); + Server().AddSession( this ); iHoldingResources = EFalse; User::LeaveIfError( iFs.Connect() ); Server().CheckConfigurationL( iAppUid ); @@ -93,7 +95,7 @@ } delete iClientRequestHandler; - Server().DropSession(); + Server().DropSession( this ); #ifdef HSPS_LOG_ACTIVE if( iLogBus ) @@ -284,7 +286,15 @@ #ifdef HSPS_LOG_ACTIVE iLogBus->LogText( _L( "DoServiceL: EhspsCopyResources" ) ); #endif - CopyResourceFilesL( aMessage ); + if( iResourceFileCopyRequired ) + { + CopyResourceFilesL( aMessage ); + iResourceFileCopyRequired = EFalse; + } + else + { + aMessage.Complete( EhspsResourceCopySuccess ); + } break; } case EhspsAddPlugin: @@ -1001,5 +1011,50 @@ return iFs; } +// ----------------------------------------------------------------------------- +// ChspsThemeServerSession::IconFileCopyRequired +// ----------------------------------------------------------------------------- +// +TBool ChspsThemeServerSession::IconFileCopyRequired() const + { + return iIconFileCopyRequired; + } + +// ----------------------------------------------------------------------------- +// ChspsThemeServerSession::SetIconFileCopyRequired +// ----------------------------------------------------------------------------- +// +void ChspsThemeServerSession::SetIconFileCopyRequired( const TBool aCopyRequired ) + { + iIconFileCopyRequired = aCopyRequired; + } + +// ----------------------------------------------------------------------------- +// ChspsThemeServerSession::ResourceFileCopyRequired +// ----------------------------------------------------------------------------- +// +TBool ChspsThemeServerSession::ResourceFileCopyRequired() const + { + return iResourceFileCopyRequired; + } + +// ----------------------------------------------------------------------------- +// ChspsThemeServerSession::SetResourceFileCopyRequired +// ----------------------------------------------------------------------------- +// +void ChspsThemeServerSession::SetResourceFileCopyRequired( const TBool aCopyRequired ) + { + iResourceFileCopyRequired = aCopyRequired; + } + +// ----------------------------------------------------------------------------- +// ChspsThemeServerSession::AppUid +// ----------------------------------------------------------------------------- +// +TBool ChspsThemeServerSession::AppUid() const + { + return iAppUid; + } + // end of file diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsodt/bwins/hspsodtu.def --- a/homescreenpluginsrv/hspsodt/bwins/hspsodtu.def Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsodt/bwins/hspsodtu.def Fri Mar 12 15:43:54 2010 +0200 @@ -1,52 +1,54 @@ EXPORTS - ?AddResourceL@ChspsODT@@QAEXPAVChspsResource@@@Z @ 1 NONAME ; void ChspsODT::AddResourceL(class ChspsResource *) - ?CloneL@ChspsODT@@QAEPAV1@XZ @ 2 NONAME ; class ChspsODT * ChspsODT::CloneL(void) - ?ConfigurationType@ChspsODT@@QBEIXZ @ 3 NONAME ; unsigned int ChspsODT::ConfigurationType(void) const - ?CopyDomDocumentL@ChspsODT@@QAEXAAVChspsDomDocument@@@Z @ 4 NONAME ; void ChspsODT::CopyDomDocumentL(class ChspsDomDocument &) - ?DeleteResourceL@ChspsODT@@QAEXH@Z @ 5 NONAME ; void ChspsODT::DeleteResourceL(int) - ?DomDocument@ChspsODT@@QBEAAVChspsDomDocument@@XZ @ 6 NONAME ; class ChspsDomDocument & ChspsODT::DomDocument(void) const - ?ExternalizeHeaderL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 7 NONAME ; void ChspsODT::ExternalizeHeaderL(class RWriteStream &) const - ?ExternalizeL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 8 NONAME ; void ChspsODT::ExternalizeL(class RWriteStream &) const - ?ExternalizeResourceListL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 9 NONAME ; void ChspsODT::ExternalizeResourceListL(class RWriteStream &) const - ?Flags@ChspsODT@@QBEIXZ @ 10 NONAME ; unsigned int ChspsODT::Flags(void) const - ?InternalizeHeaderL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 11 NONAME ; void ChspsODT::InternalizeHeaderL(class RReadStream &) - ?InternalizeL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 12 NONAME ; void ChspsODT::InternalizeL(class RReadStream &) - ?InternalizeResourceListL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 13 NONAME ; void ChspsODT::InternalizeResourceListL(class RReadStream &) - ?MarshalHeaderL@ChspsODT@@QBEPAVHBufC8@@XZ @ 14 NONAME ; class HBufC8 * ChspsODT::MarshalHeaderL(void) const - ?NewL@ChspsODT@@SAPAV1@XZ @ 15 NONAME ; class ChspsODT * ChspsODT::NewL(void) - ?NewLC@ChspsODT@@SAPAV1@ABVTDesC8@@@Z @ 16 NONAME ; class ChspsODT * ChspsODT::NewLC(class TDesC8 const &) - ?OdtLanguage@ChspsODT@@QBEHXZ @ 17 NONAME ; int ChspsODT::OdtLanguage(void) const - ?PackageVersion@ChspsODT@@QBEABVTDesC16@@XZ @ 18 NONAME ; class TDesC16 const & ChspsODT::PackageVersion(void) const - ?ProviderName@ChspsODT@@QBEABVTDesC16@@XZ @ 19 NONAME ; class TDesC16 const & ChspsODT::ProviderName(void) const - ?ProviderUid@ChspsODT@@QBEHXZ @ 20 NONAME ; int ChspsODT::ProviderUid(void) const - ?ResourceCount@ChspsODT@@QBEHXZ @ 21 NONAME ; int ChspsODT::ResourceCount(void) const - ?ResourceL@ChspsODT@@QBEAAVChspsResource@@H@Z @ 22 NONAME ; class ChspsResource & ChspsODT::ResourceL(int) const - ?RootUid@ChspsODT@@QBEHXZ @ 23 NONAME ; int ChspsODT::RootUid(void) const - ?SetConfigurationType@ChspsODT@@QAEXI@Z @ 24 NONAME ; void ChspsODT::SetConfigurationType(unsigned int) - ?SetFlags@ChspsODT@@QAEXI@Z @ 25 NONAME ; void ChspsODT::SetFlags(unsigned int) - ?SetOdtLanguage@ChspsODT@@QAEXH@Z @ 26 NONAME ; void ChspsODT::SetOdtLanguage(int) - ?SetPackageVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 27 NONAME ; void ChspsODT::SetPackageVersionL(class TDesC16 const &) - ?SetProviderNameL@ChspsODT@@QAEXABVTDesC16@@@Z @ 28 NONAME ; void ChspsODT::SetProviderNameL(class TDesC16 const &) - ?SetProviderUid@ChspsODT@@QAEXH@Z @ 29 NONAME ; void ChspsODT::SetProviderUid(int) - ?SetRootUid@ChspsODT@@QAEXH@Z @ 30 NONAME ; void ChspsODT::SetRootUid(int) - ?SetThemeFullNameL@ChspsODT@@QAEXABVTDesC16@@@Z @ 31 NONAME ; void ChspsODT::SetThemeFullNameL(class TDesC16 const &) - ?SetThemeShortNameL@ChspsODT@@QAEXABVTDesC16@@@Z @ 32 NONAME ; void ChspsODT::SetThemeShortNameL(class TDesC16 const &) - ?SetThemeUid@ChspsODT@@QAEXH@Z @ 33 NONAME ; void ChspsODT::SetThemeUid(int) - ?SetThemeVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 34 NONAME ; void ChspsODT::SetThemeVersionL(class TDesC16 const &) - ?ThemeFullName@ChspsODT@@QBEABVTDesC16@@XZ @ 35 NONAME ; class TDesC16 const & ChspsODT::ThemeFullName(void) const - ?ThemeShortName@ChspsODT@@QBEABVTDesC16@@XZ @ 36 NONAME ; class TDesC16 const & ChspsODT::ThemeShortName(void) const - ?ThemeUid@ChspsODT@@QBEHXZ @ 37 NONAME ; int ChspsODT::ThemeUid(void) const - ?ThemeVersion@ChspsODT@@QBEABVTDesC16@@XZ @ 38 NONAME ; class TDesC16 const & ChspsODT::ThemeVersion(void) const - ?UnMarshalHeaderL@ChspsODT@@QAEXABVTDesC8@@@Z @ 39 NONAME ; void ChspsODT::UnMarshalHeaderL(class TDesC8 const &) - ?UnMarshalHeaderLC@ChspsODT@@SAPAV1@ABVTDesC8@@@Z @ 40 NONAME ; class ChspsODT * ChspsODT::UnMarshalHeaderLC(class TDesC8 const &) - ?Family@ChspsODT@@QBEKXZ @ 41 NONAME ; unsigned long ChspsODT::Family(void) const - ?SetFamily@ChspsODT@@QAEXK@Z @ 42 NONAME ; void ChspsODT::SetFamily(unsigned long) - ?SetMultiInstance@ChspsODT@@QAEXH@Z @ 43 NONAME ; void ChspsODT::SetMultiInstance(int) - ?MultiInstance@ChspsODT@@QBEHXZ @ 44 NONAME ; int ChspsODT::MultiInstance(void) const - ?Description@ChspsODT@@QBEABVTDesC16@@XZ @ 45 NONAME ; class TDesC16 const & ChspsODT::Description(void) const - ?PreviewFile@ChspsODT@@QBEABVTDesC16@@XZ @ 46 NONAME ; class TDesC16 const & ChspsODT::PreviewFile(void) const - ?SetLogoFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 47 NONAME ; void ChspsODT::SetLogoFileL(class TDesC16 const &) - ?SetDescriptionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 48 NONAME ; void ChspsODT::SetDescriptionL(class TDesC16 const &) - ?SetPreviewFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 49 NONAME ; void ChspsODT::SetPreviewFileL(class TDesC16 const &) + ?SetRootUid@ChspsODT@@QAEXH@Z @ 1 NONAME ; void ChspsODT::SetRootUid(int) + ?SetProviderNameL@ChspsODT@@QAEXABVTDesC16@@@Z @ 2 NONAME ; void ChspsODT::SetProviderNameL(class TDesC16 const &) + ?NewL@ChspsODT@@SAPAV1@XZ @ 3 NONAME ; class ChspsODT * ChspsODT::NewL(void) + ?InternalizeL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 4 NONAME ; void ChspsODT::InternalizeL(class RReadStream &) + ?Flags@ChspsODT@@QBEIXZ @ 5 NONAME ; unsigned int ChspsODT::Flags(void) const + ?Description@ChspsODT@@QBEABVTDesC16@@XZ @ 6 NONAME ; class TDesC16 const & ChspsODT::Description(void) const + ?SetConfigurationType@ChspsODT@@QAEXI@Z @ 7 NONAME ; void ChspsODT::SetConfigurationType(unsigned int) + ?DomDocument@ChspsODT@@QBEAAVChspsDomDocument@@XZ @ 8 NONAME ; class ChspsDomDocument & ChspsODT::DomDocument(void) const + ?Family@ChspsODT@@QBEKXZ @ 9 NONAME ; unsigned long ChspsODT::Family(void) const + ?UnMarshalHeaderLC@ChspsODT@@SAPAV1@ABVTDesC8@@@Z @ 10 NONAME ; class ChspsODT * ChspsODT::UnMarshalHeaderLC(class TDesC8 const &) + ?ExternalizeResourceListL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 11 NONAME ; void ChspsODT::ExternalizeResourceListL(class RWriteStream &) const + ?SetThemeFullNameL@ChspsODT@@QAEXABVTDesC16@@@Z @ 12 NONAME ; void ChspsODT::SetThemeFullNameL(class TDesC16 const &) + ?SetFlags@ChspsODT@@QAEXI@Z @ 13 NONAME ; void ChspsODT::SetFlags(unsigned int) + ?ResourceCount@ChspsODT@@QBEHXZ @ 14 NONAME ; int ChspsODT::ResourceCount(void) const + ?SetThemeShortNameL@ChspsODT@@QAEXABVTDesC16@@@Z @ 15 NONAME ; void ChspsODT::SetThemeShortNameL(class TDesC16 const &) + ?PreviewFile@ChspsODT@@QBEABVTDesC16@@XZ @ 16 NONAME ; class TDesC16 const & ChspsODT::PreviewFile(void) const + ?DeleteResourceL@ChspsODT@@QAEXH@Z @ 17 NONAME ; void ChspsODT::DeleteResourceL(int) + ?ThemeVersion@ChspsODT@@QBEABVTDesC16@@XZ @ 18 NONAME ; class TDesC16 const & ChspsODT::ThemeVersion(void) const + ?SetThemeUid@ChspsODT@@QAEXH@Z @ 19 NONAME ; void ChspsODT::SetThemeUid(int) + ?CopyDomDocumentL@ChspsODT@@QAEXAAVChspsDomDocument@@@Z @ 20 NONAME ; void ChspsODT::CopyDomDocumentL(class ChspsDomDocument &) + ?SetLogoFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 21 NONAME ; void ChspsODT::SetLogoFileL(class TDesC16 const &) + ?SetFamily@ChspsODT@@QAEXK@Z @ 22 NONAME ; void ChspsODT::SetFamily(unsigned long) + ?CloneL@ChspsODT@@QBEPAV1@XZ @ 23 NONAME ; class ChspsODT * ChspsODT::CloneL(void) const + ?PackageVersion@ChspsODT@@QBEABVTDesC16@@XZ @ 24 NONAME ; class TDesC16 const & ChspsODT::PackageVersion(void) const + ?AddResourceL@ChspsODT@@QAEXPAVChspsResource@@@Z @ 25 NONAME ; void ChspsODT::AddResourceL(class ChspsResource *) + ?SetPackageVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 26 NONAME ; void ChspsODT::SetPackageVersionL(class TDesC16 const &) + ?SetMultiInstance@ChspsODT@@QAEXH@Z @ 27 NONAME ; void ChspsODT::SetMultiInstance(int) + ?MultiInstance@ChspsODT@@QBEHXZ @ 28 NONAME ; int ChspsODT::MultiInstance(void) const + ?ConfigurationType@ChspsODT@@QBEIXZ @ 29 NONAME ; unsigned int ChspsODT::ConfigurationType(void) const + ?NewLC@ChspsODT@@SAPAV1@ABVTDesC8@@@Z @ 30 NONAME ; class ChspsODT * ChspsODT::NewLC(class TDesC8 const &) + ?ProviderName@ChspsODT@@QBEABVTDesC16@@XZ @ 31 NONAME ; class TDesC16 const & ChspsODT::ProviderName(void) const + ?ResourceL@ChspsODT@@QBEAAVChspsResource@@H@Z @ 32 NONAME ; class ChspsResource & ChspsODT::ResourceL(int) const + ?OdtLanguage@ChspsODT@@QBEHXZ @ 33 NONAME ; int ChspsODT::OdtLanguage(void) const + ?MarshalHeaderL@ChspsODT@@QBEPAVHBufC8@@XZ @ 34 NONAME ; class HBufC8 * ChspsODT::MarshalHeaderL(void) const + ?RootUid@ChspsODT@@QBEHXZ @ 35 NONAME ; int ChspsODT::RootUid(void) const + ?ProviderUid@ChspsODT@@QBEHXZ @ 36 NONAME ; int ChspsODT::ProviderUid(void) const + ?SetDescriptionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 37 NONAME ; void ChspsODT::SetDescriptionL(class TDesC16 const &) + ?ThemeShortName@ChspsODT@@QBEABVTDesC16@@XZ @ 38 NONAME ; class TDesC16 const & ChspsODT::ThemeShortName(void) const + ?ThemeFullName@ChspsODT@@QBEABVTDesC16@@XZ @ 39 NONAME ; class TDesC16 const & ChspsODT::ThemeFullName(void) const + ?SetThemeVersionL@ChspsODT@@QAEXABVTDesC16@@@Z @ 40 NONAME ; void ChspsODT::SetThemeVersionL(class TDesC16 const &) + ?InternalizeResourceListL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 41 NONAME ; void ChspsODT::InternalizeResourceListL(class RReadStream &) + ?CloneL@ChspsODT@@QAEXAAV1@@Z @ 42 NONAME ; void ChspsODT::CloneL(class ChspsODT &) + ?SetPreviewFileL@ChspsODT@@QAEXABVTDesC16@@@Z @ 43 NONAME ; void ChspsODT::SetPreviewFileL(class TDesC16 const &) + ?SetOdtLanguage@ChspsODT@@QAEXH@Z @ 44 NONAME ; void ChspsODT::SetOdtLanguage(int) + ?ExternalizeHeaderL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 45 NONAME ; void ChspsODT::ExternalizeHeaderL(class RWriteStream &) const + ?InternalizeHeaderL@ChspsODT@@QAEXAAVRReadStream@@@Z @ 46 NONAME ; void ChspsODT::InternalizeHeaderL(class RReadStream &) + ?ExternalizeL@ChspsODT@@QBEXAAVRWriteStream@@@Z @ 47 NONAME ; void ChspsODT::ExternalizeL(class RWriteStream &) const + ?SetProviderUid@ChspsODT@@QAEXH@Z @ 48 NONAME ; void ChspsODT::SetProviderUid(int) + ?UnMarshalHeaderL@ChspsODT@@QAEXABVTDesC8@@@Z @ 49 NONAME ; void ChspsODT::UnMarshalHeaderL(class TDesC8 const &) ?LogoFile@ChspsODT@@QBEABVTDesC16@@XZ @ 50 NONAME ; class TDesC16 const & ChspsODT::LogoFile(void) const + ?ThemeUid@ChspsODT@@QBEHXZ @ 51 NONAME ; int ChspsODT::ThemeUid(void) const + ?DeleteAllResources@ChspsODT@@QAEXXZ @ 52 NONAME ; void ChspsODT::DeleteAllResources(void) diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsodt/eabi/hspsodtu.def --- a/homescreenpluginsrv/hspsodt/eabi/hspsodtu.def Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsodt/eabi/hspsodtu.def Fri Mar 12 15:43:54 2010 +0200 @@ -3,51 +3,53 @@ _ZN8ChspsODT11SetThemeUidEi @ 2 NONAME _ZN8ChspsODT12AddResourceLEP13ChspsResource @ 3 NONAME _ZN8ChspsODT12InternalizeLER11RReadStream @ 4 NONAME - _ZN8ChspsODT14SetOdtLanguageEi @ 5 NONAME - _ZN8ChspsODT14SetProviderUidEi @ 6 NONAME - _ZN8ChspsODT15DeleteResourceLEi @ 7 NONAME - _ZN8ChspsODT16CopyDomDocumentLER16ChspsDomDocument @ 8 NONAME - _ZN8ChspsODT16SetProviderNameLERK7TDesC16 @ 9 NONAME - _ZN8ChspsODT16SetThemeVersionLERK7TDesC16 @ 10 NONAME - _ZN8ChspsODT16UnMarshalHeaderLERK6TDesC8 @ 11 NONAME - _ZN8ChspsODT17SetThemeFullNameLERK7TDesC16 @ 12 NONAME - _ZN8ChspsODT17UnMarshalHeaderLCERK6TDesC8 @ 13 NONAME - _ZN8ChspsODT18InternalizeHeaderLER11RReadStream @ 14 NONAME - _ZN8ChspsODT18SetPackageVersionLERK7TDesC16 @ 15 NONAME - _ZN8ChspsODT18SetThemeShortNameLERK7TDesC16 @ 16 NONAME - _ZN8ChspsODT20SetConfigurationTypeEj @ 17 NONAME - _ZN8ChspsODT24InternalizeResourceListLER11RReadStream @ 18 NONAME - _ZN8ChspsODT4NewLEv @ 19 NONAME - _ZN8ChspsODT5NewLCERK6TDesC8 @ 20 NONAME - _ZN8ChspsODT6CloneLEv @ 21 NONAME - _ZN8ChspsODT8SetFlagsEj @ 22 NONAME - _ZNK8ChspsODT11DomDocumentEv @ 23 NONAME - _ZNK8ChspsODT11OdtLanguageEv @ 24 NONAME - _ZNK8ChspsODT11ProviderUidEv @ 25 NONAME - _ZNK8ChspsODT12ExternalizeLER12RWriteStream @ 26 NONAME - _ZNK8ChspsODT12ProviderNameEv @ 27 NONAME - _ZNK8ChspsODT12ThemeVersionEv @ 28 NONAME - _ZNK8ChspsODT13ResourceCountEv @ 29 NONAME - _ZNK8ChspsODT13ThemeFullNameEv @ 30 NONAME - _ZNK8ChspsODT14MarshalHeaderLEv @ 31 NONAME - _ZNK8ChspsODT14PackageVersionEv @ 32 NONAME - _ZNK8ChspsODT14ThemeShortNameEv @ 33 NONAME - _ZNK8ChspsODT17ConfigurationTypeEv @ 34 NONAME - _ZNK8ChspsODT24ExternalizeResourceListLER12RWriteStream @ 35 NONAME - _ZNK8ChspsODT5FlagsEv @ 36 NONAME - _ZNK8ChspsODT7RootUidEv @ 37 NONAME - _ZNK8ChspsODT8ThemeUidEv @ 38 NONAME - _ZNK8ChspsODT9ResourceLEi @ 39 NONAME - _ZTI8ChspsODT @ 40 NONAME ; ## - _ZTV8ChspsODT @ 41 NONAME ; ## - _ZN8ChspsODT9SetFamilyEm @ 42 NONAME - _ZNK8ChspsODT6FamilyEv @ 43 NONAME - _ZN8ChspsODT16SetMultiInstanceEi @ 44 NONAME - _ZNK8ChspsODT13MultiInstanceEv @ 45 NONAME - _ZN8ChspsODT12SetLogoFileLERK7TDesC16 @ 46 NONAME - _ZN8ChspsODT15SetDescriptionLERK7TDesC16 @ 47 NONAME - _ZN8ChspsODT15SetPreviewFileLERK7TDesC16 @ 48 NONAME - _ZNK8ChspsODT11DescriptionEv @ 49 NONAME - _ZNK8ChspsODT11PreviewFileEv @ 50 NONAME - _ZNK8ChspsODT8LogoFileEv @ 51 NONAME + _ZN8ChspsODT12SetLogoFileLERK7TDesC16 @ 5 NONAME + _ZN8ChspsODT14SetOdtLanguageEi @ 6 NONAME + _ZN8ChspsODT14SetProviderUidEi @ 7 NONAME + _ZN8ChspsODT15DeleteResourceLEi @ 8 NONAME + _ZN8ChspsODT15SetDescriptionLERK7TDesC16 @ 9 NONAME + _ZN8ChspsODT15SetPreviewFileLERK7TDesC16 @ 10 NONAME + _ZN8ChspsODT16CopyDomDocumentLER16ChspsDomDocument @ 11 NONAME + _ZN8ChspsODT16SetMultiInstanceEi @ 12 NONAME + _ZN8ChspsODT16SetProviderNameLERK7TDesC16 @ 13 NONAME + _ZN8ChspsODT16SetThemeVersionLERK7TDesC16 @ 14 NONAME + _ZN8ChspsODT16UnMarshalHeaderLERK6TDesC8 @ 15 NONAME + _ZN8ChspsODT17SetThemeFullNameLERK7TDesC16 @ 16 NONAME + _ZN8ChspsODT17UnMarshalHeaderLCERK6TDesC8 @ 17 NONAME + _ZN8ChspsODT18InternalizeHeaderLER11RReadStream @ 18 NONAME + _ZN8ChspsODT18SetPackageVersionLERK7TDesC16 @ 19 NONAME + _ZN8ChspsODT18SetThemeShortNameLERK7TDesC16 @ 20 NONAME + _ZN8ChspsODT20SetConfigurationTypeEj @ 21 NONAME + _ZN8ChspsODT24InternalizeResourceListLER11RReadStream @ 22 NONAME + _ZN8ChspsODT4NewLEv @ 23 NONAME + _ZN8ChspsODT5NewLCERK6TDesC8 @ 24 NONAME + _ZN8ChspsODT6CloneLERS_ @ 25 NONAME + _ZN8ChspsODT8SetFlagsEj @ 26 NONAME + _ZN8ChspsODT9SetFamilyEm @ 27 NONAME + _ZNK8ChspsODT11DescriptionEv @ 28 NONAME + _ZNK8ChspsODT11DomDocumentEv @ 29 NONAME + _ZNK8ChspsODT11OdtLanguageEv @ 30 NONAME + _ZNK8ChspsODT11PreviewFileEv @ 31 NONAME + _ZNK8ChspsODT11ProviderUidEv @ 32 NONAME + _ZNK8ChspsODT12ExternalizeLER12RWriteStream @ 33 NONAME + _ZNK8ChspsODT12ProviderNameEv @ 34 NONAME + _ZNK8ChspsODT12ThemeVersionEv @ 35 NONAME + _ZNK8ChspsODT13MultiInstanceEv @ 36 NONAME + _ZNK8ChspsODT13ResourceCountEv @ 37 NONAME + _ZNK8ChspsODT13ThemeFullNameEv @ 38 NONAME + _ZNK8ChspsODT14MarshalHeaderLEv @ 39 NONAME + _ZNK8ChspsODT14PackageVersionEv @ 40 NONAME + _ZNK8ChspsODT14ThemeShortNameEv @ 41 NONAME + _ZNK8ChspsODT17ConfigurationTypeEv @ 42 NONAME + _ZNK8ChspsODT24ExternalizeResourceListLER12RWriteStream @ 43 NONAME + _ZNK8ChspsODT5FlagsEv @ 44 NONAME + _ZNK8ChspsODT6CloneLEv @ 45 NONAME + _ZNK8ChspsODT6FamilyEv @ 46 NONAME + _ZNK8ChspsODT7RootUidEv @ 47 NONAME + _ZNK8ChspsODT8LogoFileEv @ 48 NONAME + _ZNK8ChspsODT8ThemeUidEv @ 49 NONAME + _ZNK8ChspsODT9ResourceLEi @ 50 NONAME + _ZTI8ChspsODT @ 51 NONAME + _ZTV8ChspsODT @ 52 NONAME + _ZN8ChspsODT18DeleteAllResourcesEv @ 53 NONAME diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspsodt/src/hspsodt.cpp --- a/homescreenpluginsrv/hspsodt/src/hspsodt.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspsodt/src/hspsodt.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -50,6 +50,47 @@ } // ----------------------------------------------------------------------------- +// ChspsODT::CopyODTDataL() +// Helper to ODT cloning. Prevents duplicate code in two clone methods. +// ----------------------------------------------------------------------------- +// +void ChspsODT::CopyODTDataL( const ChspsODT& aSource, ChspsODT& aTarget ) + { + // Properties. + aTarget.SetFamily( aSource.Family() ); + aTarget.SetConfigurationType( aSource.ConfigurationType() ); + aTarget.SetRootUid( aSource.RootUid() ); + aTarget.SetProviderUid( aSource.ProviderUid() ); + aTarget.SetThemeUid( aSource.ThemeUid() ); + aTarget.SetProviderNameL( aSource.ProviderName() ); + aTarget.SetThemeFullNameL( aSource.ThemeFullName() ); + aTarget.SetThemeShortNameL( aSource.ThemeShortName() ); + aTarget.SetThemeVersionL( aSource.ThemeVersion() ); + aTarget.SetPackageVersionL( aSource.PackageVersion() ); + aTarget.SetDescriptionL( aSource.Description() ); + aTarget.SetLogoFileL( aSource.LogoFile() ); + aTarget.SetPreviewFileL( aSource.PreviewFile() ); + aTarget.SetMultiInstance( aSource.MultiInstance() ); + aTarget.SetOdtLanguage( aSource.OdtLanguage() ); + aTarget.SetFlags( aSource.Flags() ); + + // Resources. + aTarget.DeleteAllResources(); + TInt resourceCount = aSource.ResourceCount(); + for ( TInt index = 0; index < resourceCount ; index++ ) + { + ChspsResource* resource = ( aSource.ResourceL( index ) ).CloneL(); + CleanupStack::PushL( resource ); + aTarget.AddResourceL( resource ); + CleanupStack::Pop( resource ); + resource = NULL; + } + + // DOM tree. + aTarget.CopyDomDocumentL( aSource.DomDocument() ); + } + +// ----------------------------------------------------------------------------- // ChspsODT::NewL // Two-phased constructor. // ----------------------------------------------------------------------------- @@ -204,6 +245,7 @@ aStream.WriteUint32L( iProviderUid ); aStream.WriteUint32L( iThemeUid ); aStream.WriteInt32L( iMultiInstance ); + if ( iDescription ) { aStream << *iDescription; @@ -263,8 +305,10 @@ { aStream << KNullDesC; } + aStream.WriteInt32L( iLanguage ); aStream.WriteUint32L( iFlags ); + // end of the header delimiter aStream.WriteL( KDelim ); } @@ -394,6 +438,16 @@ } // ----------------------------------------------------------------------------- +// ChspsODT::DeleteResourceListL +// Deletes all resources from the ODT. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +EXPORT_C void ChspsODT::DeleteAllResources() + { + iResourceList->ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- // ChspsODT::ResourceL // Get the resource by the index // (other items were commented in a header). @@ -462,7 +516,6 @@ } } - // ----------------------------------------------------------------------------- // ChspsODT::SetRootUid // Set RootUid @@ -689,61 +742,30 @@ { return *iDomDocument; } - + // ----------------------------------------------------------------------------- // ChspsODT::CloneL() // Makes a clone of this ODT and returns pointer to it // (other items were commented in a header). // ----------------------------------------------------------------------------- // -EXPORT_C ChspsODT* ChspsODT::CloneL() +EXPORT_C ChspsODT* ChspsODT::CloneL() const { - ChspsODT* clone = new (ELeave) ChspsODT; - CleanupStack::PushL( clone ); - clone->ConstructL(); - clone->SetConfigurationType( iConfigurationType ); - clone->SetRootUid( iRootUid ); - clone->SetProviderUid( iProviderUid ); - clone->SetThemeUid( iThemeUid ); - if( iProviderName ) - { - clone->SetProviderNameL( *iProviderName ); - } - if( iThemeFullName ) - { - clone->SetThemeFullNameL( *iThemeFullName ); - } - if( iThemeShortName ) - { - clone->SetThemeShortNameL( *iThemeShortName ); - } - if( iThemeVersion ) - { - clone->SetThemeVersionL( *iThemeVersion ); - } - if( iPackageVersion ) - { - clone->SetPackageVersionL( *iPackageVersion ); - } - if( iDescription ) - { - clone->SetDescriptionL( *iDescription ); - } - clone->SetOdtLanguage( iLanguage ); - clone->SetFlags( iFlags ); - - TInt resourceCount = iResourceList->Count(); - - for ( TInt index = 0; index < resourceCount ; index++ ) - { - ChspsResource& resource = ResourceL( index ); - clone->AddResourceL( resource.CloneL() ); - } - - CleanupStack::Pop( clone ); + ChspsODT* clone = ChspsODT::NewL(); + CleanupStack::PushL( clone ); + ChspsODT::CopyODTDataL( *this, *clone ); + CleanupStack::Pop( clone ); return clone; } - + +// ----------------------------------------------------------------------------- +// Copies data from an exisiting ODT +// ----------------------------------------------------------------------------- +EXPORT_C void ChspsODT::CloneL( ChspsODT& aODT ) + { + ChspsODT::CopyODTDataL( aODT, *this ); + } + // ----------------------------------------------------------------------------- // ChspsODT::CopyDomDocumentL() // Clones the aDom and sets it as this ChspsODT's DomDocument diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp --- a/homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/hspspluginregistry/src/hspsdefinitionrepository.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -63,8 +63,9 @@ // might leave. // ----------------------------------------------------------------------------- // -ChspsDefinitionRepository::ChspsDefinitionRepository() - { +ChspsDefinitionRepository::ChspsDefinitionRepository() : + iCacheLastODT( NULL ) + { } // ----------------------------------------------------------------------------- @@ -122,6 +123,8 @@ iObservers.Close(); delete iPath; + delete iCacheLastODT; + iTempFileName1 = KNullDesC; iTempFileName2 = KNullDesC; } @@ -200,6 +203,13 @@ } #endif + if( aODT.ConfigurationType() == EhspsAppConfiguration ) + { + delete iCacheLastODT; + iCacheLastODT = NULL; + iCacheLastODT = aODT.CloneL(); + } + return ret; } @@ -212,6 +222,7 @@ EXPORT_C TInt ChspsDefinitionRepository::GetOdtL( ChspsODT& aODT ) { TInt errorCode = KErrNone; + if ( aODT.Flags() & EhspsThemeStatusLicenceeDefault ) { iLicenseDefault = ETrue; @@ -221,12 +232,23 @@ iLicenseDefault = EFalse; } - TRAP( errorCode, GetPathL( aODT, EResourceODT )); - if ( !errorCode ) - { - errorCode = ReadFromFileL( *iPath, aODT ); - } - iLicenseDefault = EFalse; + if( iCacheLastODT && + iCacheLastODT->RootUid() == aODT.RootUid() && + iCacheLastODT->ThemeUid() == aODT.ThemeUid() ) + { + aODT.CloneL( *iCacheLastODT ); + } + else + { + TRAP( errorCode, GetPathL( aODT, EResourceODT )); + if ( !errorCode ) + { + errorCode = ReadFromFileL( *iPath, aODT ); + } + } + + iLicenseDefault = EFalse; + return errorCode; } diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/inc/hspsdefinitionrepository.h --- a/homescreenpluginsrv/inc/hspsdefinitionrepository.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsdefinitionrepository.h Fri Mar 12 15:43:54 2010 +0200 @@ -491,7 +491,10 @@ #ifdef HSPS_LOG_ACTIVE // Log bus. Not owned. ChspsLogBus* iLogBus; -#endif +#endif + + // Cached copy of last retrieved ODT. + ChspsODT* iCacheLastODT; }; #endif // C_hspsDEFINITIONREPOSITORY_H diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/inc/hspsdomstringpool.h --- a/homescreenpluginsrv/inc/hspsdomstringpool.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsdomstringpool.h Fri Mar 12 15:43:54 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005,2006 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" @@ -15,25 +15,24 @@ * */ - - -#ifndef hsps_DOM_STRING_POOL_H -#define hsps_DOM_STRING_POOL_H +#ifndef HSPS_DOM_STRING_POOL_H +#define HSPS_DOM_STRING_POOL_H // INCLUDES #include #include +#include "hspsdomstringpooloptimizer.h" // CLASS DECLARATION /** - * Class utilize flyweight pattern. Dom strings are stored once - * and referred with index. Class can be serialized. - * - * @lib hspsdomdocument.lib - * @since S60 5.0 - * @ingroup group_hspsdom - */ +* @ingroup group_hspsdom +* Class utilize flyweight pattern. Dom strings are stored once +* and referred with index. Class can be serialized. +* +* @lib xndomdocument.lib +* @since Series 60 3.1 +*/ class ChspsDomStringPool : public CBase { public: // Constructors and destructor @@ -41,23 +40,26 @@ /** * Two-phased constructor. * - * @since S60 5.0 + * @param aAllowDuplicates ETrue if duplicates are to be allowed. + * Supported for legacy reasons. */ - static ChspsDomStringPool* NewL(); - + static ChspsDomStringPool* NewL( const TBool aAllowDuplicates = EFalse ); + /** * Two-phased stream constructor. * - * @since S60 5.0 - * @param aStream Source stream. - */ - static ChspsDomStringPool* NewL( RReadStream& aStream ); + * @param aStream Stream where string pool is internalized. + * @param aAllowDuplicates ETrue if duplicates are to be allowed. + * Supported for legacy reasons. + */ + static ChspsDomStringPool* NewL( RReadStream& aStream, + const TBool aAllowDuplicates = EFalse ); /** * Destructor. */ virtual ~ChspsDomStringPool(); - + public: /** * Make a copy from original StringPool. @@ -65,39 +67,63 @@ * @return Pointer to a string pool. Ownership is transferred to a caller. */ ChspsDomStringPool* CloneL(); + public: //Adding /** * Set dom string into string pool. * - * @since S60 5.0 * @param aString String to add to string pool * @return Index (reference) to string pool */ IMPORT_C TInt AddStringL( const TDesC8& aString ); - + + /** + * Set dom string into string pool. + * + * @param aString String to add to string pool. OWNERSHIP TRANSFERRED! + * @return Index (reference) to string pool + */ + TInt AddStringL( HBufC8* aString ); + + /** + * Add all string from another string pool. + * + * @param aStringPool Source string pool. + */ + void AddAllL( ChspsDomStringPool& aStringPool ); + public: //Accessing /** - * Get pointer to the node element name. - * @param aStringRef StringRef. + * Get reference to string. + * + * @param aMap Map object which has index to name string * @return Pointer to the name */ const TDesC8& String( const TInt aStringRef ); /** * Get object's data size in bytes. + * * @return Data size in bytes */ TInt Size() const; + + /** + * Get amount of strings. + */ + TInt Count() const; /** - * Externalize object + * Externalize object. + * * @param aStream Output stream */ void ExternalizeL( RWriteStream& aStream ) const; /** - * Internalize object + * Internalize object. + * * @param aStream Input stream */ void InternalizeL( RReadStream& aStream ); @@ -106,21 +132,41 @@ /** * C++ default constructor. + * + * @param aAllowDuplicates ETrue if duplicates are to be allowed. + * Supported for legacy reasons. */ - ChspsDomStringPool(); + ChspsDomStringPool( const TBool aAllowDuplicates ); /** - * By default Symbian 2nd phase constructor is private. + * By default Symbian 2nd phase constructor is private. */ - void ConstructL(); - - private: + void ConstructL(); + + /** + * Add string to string pool and to optimizer also. + * + * @param aNewString String to be added. OWNERSHIP TRANSFERRED. + * @param TInt Index to added string. + */ + TInt DoAddStringL( HBufC8* aNewString ) ; + + private: //String pool RPointerArray iStringPool; - + + /** + * String pool optimizer. + */ + ThspsDomStringPoolOptimizer iStringPoolOptimizer; + /** + * ETrue if string pool can contain duplicate entries. Must + * be supported for legacy reasons while loading xuikon odts. + */ + TBool iAllowDuplicates; }; -#endif // hsps_DOM_STRING_POOL_H +#endif // HSPS_DOM_STRING_POOL_H // End of File diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/inc/hspsdomstringpooloptimizer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenpluginsrv/inc/hspsdomstringpooloptimizer.h Fri Mar 12 15:43:54 2010 +0200 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2005,2006 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: Optimizer module for ChspsDomStringPool. +* +*/ + +#ifndef HSPS_DOM_STRING_POOL_OPTIMIZER_H +#define HSPS_DOM_STRING_POOL_OPTIMIZER_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* @ingroup group_hspsdom +* Optimizer module entry for ChspsDomStringPool. +* +* @lib hspsdomdocument.lib +* @since Series 60 5.2 +*/ +class ThspsDomStringPoolOptimizerEntry + { + public: // Construction. + /** + * Constructor. + * + * @param aIndex Index. + * @param aString String. + */ + ThspsDomStringPoolOptimizerEntry( TInt aIndex, const TDesC8& aString ); + + public: // Data. + /** + * Index of string in actual string pool. + */ + TInt iIndex; + + /** + * Reference to string in string pool. + */ + const TDesC8& iString; + }; + +/** +* @ingroup group_hspsdom +* Optimizer module for ChspsDomStringPool. +* +* @lib hspsdomdocument.lib +* @since Series 60 5.2 +*/ +class ThspsDomStringPoolOptimizer + { + public: + /** + * Add entry to optimizer list. + * + * @param aEntry Entry to be added. + */ + void AddEntryL( ThspsDomStringPoolOptimizerEntry& aEntry ); + + /** + * Get index for string. + * + * @param aString Reference to given string. + * @return TInt Index to actual string pool for string if found. + * If string is not found will return KErrNotFound. + */ + TInt GetIndex( const TDesC8& aString ); + + /** + * Reset. + */ + void Reset(); + + /** + * Close allocated resources. + */ + void Close(); + + /** + * Get item count. + */ + TInt Count(); + + /** + * Get entry. + * + * @param aIndex Index to Entry. + */ + ThspsDomStringPoolOptimizerEntry& Entry( const TInt aIndex ); + + private: + /** + * Find entry from alphabetic list. + * Uses binary search. + * + * @param aString Reference to string to be searched for. + * @param aLeft Left limit for binary search + * @param aRight Right limit for binary search. + * + * @return Index to OPTIMIZER ARRAY. KErrNotFound if + * given string is not found. + */ + TInt FindEntry( const TDesC8& aString, + const TInt aLeft, + const TInt aRight ); + + /** + * Find a position clue for given string. + * + * Will return index that can be used to initiate linear + * search. Uses binary search to limit required comparisons + * when string pools starts to fill. + * + * Note: Returned index is not absolute! it must be + * only used as a start index for linear searching. + * + * Returned index will be quite close to actual insertion position. + * it will be 0 - 2 steps backward from actual position. + * + * @param aString Reference to string. + * @param aLeft Left limit for binary search + * @param aRight Right limit for binary search. + * + * @return Index to start searching for position + * for given string. + */ + TInt FindInsertionIndexEstimate( const TDesC8& aString, + const TInt aLeft, + const TInt aRight ); + + private: // Data. + /** + * Array of optimizer entries. + */ + RArray iEntries; + }; + +#endif // HSPS_DOM_STRING_POOL_OPTIMIZER_H + +// End of File diff -r d0529222e3f0 -r bd874ee5e5e2 homescreenpluginsrv/inc/hspsodt.h --- a/homescreenpluginsrv/inc/hspsodt.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreenpluginsrv/inc/hspsodt.h Fri Mar 12 15:43:54 2010 +0200 @@ -151,6 +151,13 @@ * @param aIndex Index of the resource to be deleted. */ IMPORT_C void DeleteResourceL( TInt aIndex ); + + /** + * Deletes all resources from the ODT. + * + * @since S60 5.0 + */ + IMPORT_C void DeleteAllResources(); /** * Gets a resource. @@ -344,8 +351,15 @@ * @since S60 5.0 * @return ChspsODT* pointer to the cloned ODT. */ - IMPORT_C ChspsODT* CloneL(); - + IMPORT_C ChspsODT* CloneL() const; + + /** + * Clones given ODT to this ODT. + * + * @since S60 5.0 + * @param aODT Source ODT. + */ + IMPORT_C void CloneL( ChspsODT& aODT ); /** * Clones the aDom and sets it as this ChspsODT's DomDocument. @@ -475,6 +489,15 @@ */ void ConstructL(); + private: + /** + * Helper to ODT cloning. Prevents duplicate code in two clone methods. + * + * @param aSource Source ODT + * @param aTarget Target ODT + */ + static void CopyODTDataL( const ChspsODT& aSource, ChspsODT& aTarget ); + private: // Data // Family mask (bits for e.g. vga, qhd_tch etc resolutions) diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/ai_plugin_management_api/inc/aidevicestatuscontentmodel.h --- a/homescreensrv_plat/ai_plugin_management_api/inc/aidevicestatuscontentmodel.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/ai_plugin_management_api/inc/aidevicestatuscontentmodel.h Fri Mar 12 15:43:54 2010 +0200 @@ -46,6 +46,7 @@ EAiDeviceStatusContentGeneralIndicator, EAiDeviceStatusContentVHZText, EAiDeviceStatusContentCUGMCNIndicator + ,EAiDeviceStatusContentNetRegStatus }; @@ -64,7 +65,7 @@ const wchar_t KAiDeviceStatusContentGeneralIndicator_Cid[] = L"GeneralIndicator"; const wchar_t KAiDeviceStatusContentVHZText_Cid[] = L"VHZText"; const wchar_t KAiDeviceStatusContentCUGMCNIndicator_Cid[] = L"CUGMCNIndicator"; - +const wchar_t KAiDeviceStatusContentNetRegStatus_Cid[] = L"NetRegStatus"; const char KAiDeviceStatusMimeTypeTextPlain[] = "text/plain"; @@ -130,6 +131,11 @@ //Published data is localized text, for example "Group 1" or MCN message { EAiDeviceStatusContentCUGMCNIndicator, KAiDeviceStatusContentCUGMCNIndicator_Cid, KAiDeviceStatusMimeTypeTextPlain } + + //Published data is network registration status + , { EAiDeviceStatusContentNetRegStatus, KAiDeviceStatusContentNetRegStatus_Cid, + KAiDeviceStatusMimeTypeTextPlain } + }; const TInt KAiDeviceStatusContentCount = sizeof( KAiDeviceStatusContent ) / @@ -142,11 +148,13 @@ { EAiDeviceStatusResourceSIMRegFail, EAiDeviceStatusResourceNWOk, - EAiDeviceStatusResourceNWLost + EAiDeviceStatusResourceNWLost + ,EAiDeviceStatusResourceNetRegFail }; const wchar_t KAiDeviceStatusResourceSIMRegFail_Cid[] = L"SIMRegFail"; -const wchar_t KAiDeviceStatusResourceShowNWLost_Cid[] = L"NWLost"; +const wchar_t KAiDeviceStatusResourceShowNWLost_Cid[] = L"NWLost"; +const wchar_t KAiDeviceStatusResourceNetRegFail_Cid[] = L"NetRegFail"; const TAiContentItem KAiDeviceStatusResources[] = @@ -155,7 +163,10 @@ { EAiDeviceStatusResourceSIMRegFail, KAiDeviceStatusResourceSIMRegFail_Cid, KAiDeviceStatusMimeTypeTextPlain }, { EAiDeviceStatusResourceNWLost, KAiDeviceStatusResourceShowNWLost_Cid, - KAiDeviceStatusMimeTypeTextPlain }, + KAiDeviceStatusMimeTypeTextPlain }, + { EAiDeviceStatusResourceNetRegFail, KAiDeviceStatusResourceNetRegFail_Cid, + KAiDeviceStatusMimeTypeTextPlain }, + }; const TInt KAiDeviceStatusResourceCount = sizeof( KAiDeviceStatusResources ) / diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h --- a/homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/hs_content_control_api/inc/hscontentcontroller.h Fri Mar 12 15:43:54 2010 +0200 @@ -62,25 +62,39 @@ { public: /** - * Fills an array of CHsContentInfo. Both widget and template types are appended. - * @param aArray Array of CHsContentInfo + * Returns the list of available Home screen widgets + * @param aArray List of widgets + * @return KErrNone on success, any of system wide error codes */ virtual TInt WidgetListL( CHsContentInfoArray& aArray ) = 0; /** - * Fills an array of CHsContentInfo. View types are appended. - * @param aArray Array of CHsContentInfo + * Returns the list of Home screen widgets included in an application + * configuration or a view + * @param aInfo Content info defining the application configuration + * or the view which widget list is requested + * @param aArray List of widgets + * @return KErrNone on success, any of system wide error codes + */ + virtual TInt WidgetListL( CHsContentInfo& aInfo, CHsContentInfoArray& aArray ) = 0; + + /** + * Returns the list of available Home screen views + * @param aArray List of views + * @return KErrNone on success, any of system wide error codes */ virtual TInt ViewListL( CHsContentInfoArray& aArray ) = 0; /** - * + * Returns the list of available Home screen application configurations + * @param aArray List of application configurations + * @return KErrNone on success, any of system wide error codes */ virtual TInt AppListL( CHsContentInfoArray& aArray ) = 0; /** - * Adds a widget to the active view. - * @param aInfo Content info object + * Adds a widget to the active Home screen view. + * @param aInfo Widget request to be added * @return KErrNone on success, any of system wide error codes, * KHsErrorViewFull, KHsErrorMaxInstanceCountExceeded or * KHsErrorDoesNotFit @@ -89,37 +103,50 @@ /** * Removes a widget from the configuration. - * @param aInfo Content info object + * @param aInfo Widget request to be removed + * @return KErrNone on success, any of system wide error codes */ virtual TInt RemoveWidgetL( CHsContentInfo& aInfo ) = 0; /** - * + * Adds a view to the active Home screen application configuration. + * @param aInfo View request to be added + * @return KErrNone on success, any of system wide error codes */ virtual TInt AddViewL( CHsContentInfo& aInfo ) = 0; /** - * + * Removes a view from the configuration. + * @param aInfo View request to be removed + * @return KErrNone on success, any of system wide error codes */ virtual TInt RemoveViewL( CHsContentInfo& aInfo ) = 0; /** - * + * Activates the Home screen view + * @param aInfo View request to be activated + * @return KErrNone on success, any of system wide error codes */ virtual TInt ActivateViewL( CHsContentInfo& aInfo ) = 0; /** - * + * Activates the Home screen application configuration + * @param aInfo Application configuration request to be activated + * @return KErrNone on success, any of system wide error codes */ virtual TInt ActivateAppL( CHsContentInfo& aInfo ) = 0; /** - * + * Returns the active Home screen view + * @param aInfo Active view + * @return KErrNone on success, any of system wide error codes */ virtual TInt ActiveViewL( CHsContentInfo& aInfo ) = 0; /** - * + * Returns the active Home screen application configuration + * @param aInfo Active application configuration + * @return KErrNone on success, any of system wide error codes */ virtual TInt ActiveAppL( CHsContentInfo& aInfo ) = 0; diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/hs_settings_api/inc/hspluginsettings.h --- a/homescreensrv_plat/hs_settings_api/inc/hspluginsettings.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/hs_settings_api/inc/hspluginsettings.h Fri Mar 12 15:43:54 2010 +0200 @@ -52,39 +52,59 @@ * @lib HomeScreenSettingsIf.lib * @since S60 v5.0 */ -class CHomescreenSettings: +NONSHARABLE_CLASS( CHomescreenSettings ) : public CBase, public MLiwNotifyCallback, public MHomescreenSettingsIf { +public: // static methods + /** + * Get instance to settings API. + * + * InitializeL must be called before calling this method. + * Otherwise NULL is returned. InitializeL and Instance + * must be called within same thread since TLS is used + * to storage instance data. + * + * @return CHomescreenSettings* Pointer to settings api. + * Can return NULL in case of + * error. + */ + IMPORT_C static CHomescreenSettings* Instance(); + + /** + * Initialize settings api. + * + * There must be one UnInitialize call for each Initialize call + * in order to prevent memory leaking. + * (Implementation contains reference counting) + */ + IMPORT_C static void InitializeL( const TDesC8& aAppUid ); + + /** + * Uninitialize settings api. + * + * There must be one UnInitialize call for each Initialize call + * in order to prevent memory leaking. + * (Implementation contains reference counting) + */ + IMPORT_C static void UnInitialize(); + public: /** - * Two-phased constructor. + * Add observer * - * @param aAppUid Application uid in integer format - * @param aObserver Observer + * @param aObserver Observer to be added. */ - IMPORT_C static CHomescreenSettings* NewL( - const TDesC8& aAppUid, - const TDesC8& aPluginId, - MHomeScreenSettingsObserver* aObserver ); + IMPORT_C void AddObserverL( MHomeScreenSettingsObserver* aObserver ); /** - * Two-phased constructor. + * Remove observer * - * @param aAppUid Application uid in integer format - * @param aObserver Observer - */ - IMPORT_C static CHomescreenSettings* NewLC( - const TDesC8& aAppUid, - const TDesC8& aPluginId, - MHomeScreenSettingsObserver* aObserver ); + * @param aObserver Observer to be removed. + */ + IMPORT_C void RemoveObserver( MHomeScreenSettingsObserver* aObserver ); - /** - * Destructor. - */ - IMPORT_C virtual ~CHomescreenSettings(); - public: /** * From MHomescreenSettingsIf @@ -114,19 +134,33 @@ IMPORT_C TInt SetSettingsL( const TDesC8& aPluginId, const RPointerArray& aSettings, - const TBool aStoringParam ); - - + const TBool aStoringParam ); + protected: /** + * Two-phased constructor. + * + * @param aAppUid Application uid in integer format + */ + static CHomescreenSettings* NewL( const TDesC8& aAppUid ); + + /** + * Two-phased constructor. + * + * @param aAppUid Application uid in integer format + */ + static CHomescreenSettings* NewLC( + const TDesC8& aAppUid ); + + /** + * Destructor. + */ + virtual ~CHomescreenSettings(); + + /** * Constructor. - * - * @param aAppUid Application uid in integer format - * @param aObserver Observer */ - CHomescreenSettings( - MHomeScreenSettingsObserver* aObserver, - const TDesC8& aPluginId ); + CHomescreenSettings(); /** * Second phase constructor @@ -182,7 +216,6 @@ const RPointerArray& aSettings, const TDesC8& aStoringParam ); - protected: /** * From MLiwNotifyCallback @@ -210,18 +243,16 @@ * Owned. Provides hsps services. */ MLiwInterface* iHspsInterface; - /** - * Not owned. Wrapper observer - */ - MHomeScreenSettingsObserver* iObserver; + /* * Asynchronous service request tarnsaction id */ TInt iTransactionId; - /** - * Plugin id - */ - const TDesC8& iPluginId; + + /* + * List of observers. Items not owned! + */ + RPointerArray iObservers; }; } //namespace HSPluginSettingsIf diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/hs_settings_api/inc/mhomescreensettingsobserver.h --- a/homescreensrv_plat/hs_settings_api/inc/mhomescreensettingsobserver.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/hs_settings_api/inc/mhomescreensettingsobserver.h Fri Mar 12 15:43:54 2010 +0200 @@ -42,7 +42,7 @@ * @param aPluginUid Plugin uid * @param aPluginId Plugin id */ - virtual TInt SettingsChangedL( + virtual void SettingsChangedL( const TDesC8& aEvent, const TDesC8& aPluginName, const TDesC8& aPluginUid, diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisherimpl.h --- a/homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisherimpl.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/hs_widget_publisher_api/inc/hswidgetpublisherimpl.h Fri Mar 12 15:43:54 2010 +0200 @@ -33,6 +33,7 @@ namespace Hs { class HsWidget; +class HsWidgetItem; typedef std::map WidgetContentIdMapType; @@ -168,7 +169,7 @@ /** */ void InsertWidgetDataIdentifiersL( HsWidget& aWidget, - CLiwDefaultMap* aDataMap ); + CLiwDefaultMap* aDataMap, const TDesC& aContentType ); /** */ @@ -177,7 +178,7 @@ /** */ - void InsertWidgetItemsL( HsWidget& aWidget, + void InsertWidgetItemL( HsWidgetItem& aWidgetItem, CLiwDefaultMap* aDataMap ); /** @@ -190,7 +191,7 @@ /** */ - void InsertItemsTriggersL( HsWidget& aWidget, + void InsertItemTriggerL( HsWidgetItem& aWidgetItem, CLiwDefaultMap* aTriggerMap ); /** diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp --- a/homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/hs_widget_publisher_api/src/hswidgetpublisherimpl.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -198,7 +198,7 @@ { // remove widget data when widget removed from screen CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); - InsertWidgetDataIdentifiersL( aWidget, cpdatamap ); + InsertWidgetDataIdentifiersL( aWidget, cpdatamap, KAll ); // removal may fail if the client has already removed the data TRAP_IGNORE( RemoveFromCpsL( cpdatamap, KCpData ) ); mWidgetContentIds.erase( aWidget.getIdentifier() ); @@ -411,45 +411,55 @@ // --------------------------------------------------------------------------- // void HsWidgetPublisherImpl::PublishWidgetDataL( HsWidget& aWidget ) - { - CLiwGenericParamList* inParam = &(mServiceHandler->InParamListL()); - CLiwGenericParamList* outParam = &(mServiceHandler->OutParamListL()); - - TLiwGenericParam type(KType, TLiwVariant(KCpData)); - inParam->AppendL(type); - - CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); - InsertWidgetDataIdentifiersL( aWidget, cpdatamap ); - - CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC(); - InsertWidgetItemsL( aWidget, datamap ); - cpdatamap->InsertL( KDataMap, TLiwVariant( datamap ) ); - InsertWidgetACLL( cpdatamap ); - - int count = aWidget.itemsCount(); - if( count > 0 ) - { - CLiwDefaultMap* triggermap = CLiwDefaultMap::NewLC(); - InsertItemsTriggersL( aWidget, triggermap ); - cpdatamap->InsertL( KActionMap, TLiwVariant( triggermap ) ); - CleanupStack::PopAndDestroy( triggermap ); - } + { + CLiwGenericParamList* inParam = &(mServiceHandler->InParamListL()); + CLiwGenericParamList* outParam = &(mServiceHandler->OutParamListL()); + TLiwGenericParam type(KType, TLiwVariant(KCpData)); + + int count = aWidget.itemsCount(); + for( int i = 0; i < count; i++ ) + { + inParam->AppendL(type); + CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); - TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); - inParam->AppendL( item ); - mServiceInterface->ExecuteCmdL( KAdd, - *inParam, *outParam); - TInt ret= ObtainErrorCode( *outParam ); + HsWidgetItem* const widgetItem = aWidget.getWidgetItem( i ); + + // insert widget data identifiers + HBufC* itemName = StdStringToUnicodeLC( widgetItem->getItemName()); + InsertWidgetDataIdentifiersL( aWidget, cpdatamap, *itemName ); + CleanupStack::PopAndDestroy( itemName ); + + // insert widget item + CLiwDefaultMap* datamap = CLiwDefaultMap::NewLC(); + InsertWidgetItemL( *widgetItem, datamap ); + cpdatamap->InsertL( KDataMap, TLiwVariant( datamap ) ); + + // insert widget access control list + InsertWidgetACLL( cpdatamap ); + + // insert item triggers + CLiwDefaultMap* triggermap = CLiwDefaultMap::NewLC(); + InsertItemTriggerL( *widgetItem, triggermap ); + cpdatamap->InsertL( KActionMap, TLiwVariant( triggermap ) ); + CleanupStack::PopAndDestroy( triggermap ); - CleanupStack::PopAndDestroy( datamap ); - CleanupStack::PopAndDestroy( cpdatamap ); - - item.Reset(); - type.Reset(); - outParam->Reset(); - inParam->Reset(); - User::LeaveIfError( ret ); - } + // add to CPS + TLiwGenericParam item( KItem, TLiwVariant( cpdatamap )); + inParam->AppendL( item ); + mServiceInterface->ExecuteCmdL( KAdd, + *inParam, *outParam); + TInt ret= ObtainErrorCode( *outParam ); + + CleanupStack::PopAndDestroy( datamap ); + CleanupStack::PopAndDestroy( cpdatamap ); + + item.Reset(); + outParam->Reset(); + inParam->Reset(); + User::LeaveIfError( ret ); + } + type.Reset(); + } // --------------------------------------------------------------------------- // @@ -562,7 +572,7 @@ CLiwDefaultMap* cpdatamap = CLiwDefaultMap::NewLC(); TRAPD( err, - InsertWidgetDataIdentifiersL( aWidget, cpdatamap ); + InsertWidgetDataIdentifiersL( aWidget, cpdatamap, KAll ); RemoveFromCpsL( cpdatamap, KCpData ) ); if ( err != KErrNotFound ) { @@ -773,7 +783,7 @@ // --------------------------------------------------------------------------- // void HsWidgetPublisherImpl::InsertWidgetDataIdentifiersL( HsWidget& aWidget, - CLiwDefaultMap* aDataMap ) + CLiwDefaultMap* aDataMap, const TDesC& aContentType ) { WidgetContentIdMapType::const_iterator contentIdIter = mWidgetContentIds.find( aWidget.getIdentifier() ); @@ -787,7 +797,7 @@ HBufC* publisherName = StdStringToUnicodeLC( GetPublisherNameL( aWidget ) ); aDataMap->InsertL( KPublisherId, TLiwVariant( *publisherName ) ); - aDataMap->InsertL( KContentType, TLiwVariant( KAll ) ); + aDataMap->InsertL( KContentType, TLiwVariant( aContentType ) ); aDataMap->InsertL( KContentId, TLiwVariant( contentId ) ); CleanupStack::PopAndDestroy( publisherName ); @@ -835,31 +845,25 @@ // // --------------------------------------------------------------------------- // -void HsWidgetPublisherImpl::InsertWidgetItemsL ( HsWidget& aWidget, +void HsWidgetPublisherImpl::InsertWidgetItemL ( HsWidgetItem& aWidgetItem, CLiwDefaultMap* aDataMap ) { - int count = aWidget.itemsCount(); - for (int index = 0; index < count; index++) - { - HsWidgetItem* const item = aWidget.getWidgetItem( index ); - - TPtrC8 itemName = ((TUint8*)item->getItemName().c_str()); - if( item->isStringValue() ) - { - TPtrC8 itemValue = ((TUint8*)item->getItemValue().c_str()); - HBufC* value = HBufC::NewLC( KUnicodeSize * itemValue.Length() ); - TPtr dest( value->Des() ); - CnvUtfConverter::ConvertToUnicodeFromUtf8( dest, itemValue ); - - aDataMap->InsertL( itemName, TLiwVariant(*value )); - CleanupStack::PopAndDestroy(value); - } - else - { - int itemValue = item->getItemValueInt(); - aDataMap->InsertL( itemName, TLiwVariant( TInt32( itemValue ) )); - } - } + TPtrC8 itemName = ((TUint8*)aWidgetItem.getItemName().c_str()); + if( aWidgetItem.isStringValue() ) + { + TPtrC8 itemValue = ((TUint8*)aWidgetItem.getItemValue().c_str()); + HBufC* value = HBufC::NewLC( KUnicodeSize * itemValue.Length() ); + TPtr dest( value->Des() ); + CnvUtfConverter::ConvertToUnicodeFromUtf8( dest, itemValue ); + + aDataMap->InsertL( itemName, TLiwVariant(*value )); + CleanupStack::PopAndDestroy(value); + } + else + { + int itemValue = aWidgetItem.getItemValueInt(); + aDataMap->InsertL( itemName, TLiwVariant( TInt32( itemValue ) )); + } } // --------------------------------------------------------------------------- @@ -937,10 +941,9 @@ // // --------------------------------------------------------------------------- // -void HsWidgetPublisherImpl::InsertItemsTriggersL( HsWidget& aWidget, +void HsWidgetPublisherImpl::InsertItemTriggerL( HsWidgetItem& aWidgetItem, CLiwDefaultMap* aTriggerMap ) { - int count = aWidget.itemsCount(); CLiwDefaultMap* activateAction = CLiwDefaultMap::NewLC(); activateAction->InsertL( KPluginId, TLiwVariant( KCASpaAppLauncherPlugin ) ); @@ -951,13 +954,10 @@ activate->InsertL( KApaCommand, TLiwVariant( KApaCommandBackground ) ); activateAction->InsertL( KData, TLiwVariant( activate ) ); - - for (int index = 0; index < count; index++) - { - HsWidgetItem* const item = aWidget.getWidgetItem( index ); - TPtrC8 itemName = ((TUint8*)item->getItemName().c_str()); - aTriggerMap->InsertL( itemName, TLiwVariant( activateAction )); - } + + TPtrC8 itemName = ((TUint8*)aWidgetItem.getItemName().c_str()); + aTriggerMap->InsertL( itemName, TLiwVariant( activateAction )); + CleanupStack::PopAndDestroy( activate ); CleanupStack::PopAndDestroy( activateAction ); } diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h --- a/homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/inc/cpclient.h Fri Mar 12 15:43:54 2010 +0200 @@ -115,8 +115,10 @@ * @since S6CCPActiveNotifierNotifier v 5.CCPActiveNotifierNotifier * @param aInParamList input parameter list (filter) * @param aOutParamList output action_map + * @param aCmdOptions options for the command */ - void ExecuteActionL( const CLiwGenericParamList& aInParamList ); + void ExecuteActionL( const CLiwGenericParamList& aInParamList, + TUint aCmdOptions ); /** * Check second param from IDataSource interface diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h --- a/homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/inc/cpclientsession.h Fri Mar 12 15:43:54 2010 +0200 @@ -113,8 +113,9 @@ * * @since S60 v 5.0 * @param aInParamList const reference to the input list + * @param aOptions Command options. */ - void ExecuteActionL( const CCPLiwMap& aMap ); + void ExecuteActionL( const CCPLiwMap& aMap, TUint aOptions = 0 ); /** * Pass GetChangeInfoData request to server diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp --- a/homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/src/ccontentpublishinginterface.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -91,7 +91,7 @@ if ( aCmdName.CompareF( KExecuteAction ) == 0 ) { - iCPClient->ExecuteActionL( aInParamList ); + iCPClient->ExecuteActionL( aInParamList, aCmdOptions ); } else { diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp --- a/homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclient.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -195,14 +195,15 @@ // // ----------------------------------------------------------------------------- // -void CCPClient::ExecuteActionL( const CLiwGenericParamList& aInParamList ) +void CCPClient::ExecuteActionL( const CLiwGenericParamList& aInParamList, + TUint aCmdOptions) { CP_DEBUG( _L8("CCPClient::RegisterObserverL()") ); CheckMapL( aInParamList, KFilter ); CCPLiwMap* inMapForServer = CCPLiwMap::NewL( aInParamList ); inMapForServer->PushL( ); inMapForServer->IsValidForActionL( ); - iServerClient.ExecuteActionL( *inMapForServer ); + iServerClient.ExecuteActionL( *inMapForServer, aCmdOptions ); CleanupStack::PopAndDestroy( inMapForServer ); } diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp --- a/homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_contentpublishing/src/cpclientsession.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -146,12 +146,13 @@ // // ----------------------------------------------------------------------------- // -void RCPServerClient::ExecuteActionL( const CCPLiwMap& aMap ) +void RCPServerClient::ExecuteActionL( const CCPLiwMap& aMap, TUint aOptions ) { CP_DEBUG( _L8("RCPServerClient::ExecuteActionL()") ); HBufC8 *inbuf = aMap.PackForServerLC( ); TIpcArgs args; args.Set( KDescriptorPosition, &*inbuf ); + args.Set( KOptionsPosition, static_cast( aOptions ) ); User::LeaveIfError( SendReceive( ECpServerExecuteAction, args ) ); CleanupStack::PopAndDestroy( inbuf ); } diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hsps.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -36,7 +36,7 @@ _LIT8( KHspsAppUid, "appUid" ); // Heap size for test step thread -const TUint KDefaultHeapSize = 0x10000; +const TUint KDefaultHeapSize = 0x100000; // Test step data typedef struct @@ -595,11 +595,12 @@ User::WaitForRequest( status ); err = status.Int(); - testThread.Close(); - // Give test thread some time to close User::After( 2000000 ); - + + // Terminate thread. + testThread.Kill( KErrNone ); + testThread.Close(); } User::LeaveIfError( err ); diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hspsteststep.cpp --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hspsteststep.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hspsteststep.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -30,7 +30,7 @@ // ======== LOCAL CONSTANTS ==================================================== // Test step timeout -const TInt KTestStepTimeout = 5000000; +const TInt KTestStepTimeout = 15000000; // Max input const TInt KTestStepInputSizeMax = 1000; @@ -327,6 +327,21 @@ exitNow = ETrue; } } + + if( exitNow ) + { + logBus->LogText( _L("------------------------------------------") ); + logBus->LogText( _L("Differences found. Dumping output in full:") ); + for ( TInt i = 0; + i < iOutParams->Length(); + i++ ) + { + logBus->LogText( _L("[%5d], %3d, '%c'"), + i, // index + ( TUint16 )aOutPtr[i], + ( TUint16 )aOutPtr[i] ); + } + } CleanupStack::PopAndDestroy( logBus ); } diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_homescreenplugin/tsrc/group/Nokia_RnDCert_02.der Binary file homescreensrv_plat/sapi_homescreenplugin/tsrc/group/Nokia_RnDCert_02.der has changed diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_homescreenplugin/tsrc/group/Nokia_RnDCert_02.key --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/group/Nokia_RnDCert_02.key Fri Mar 12 15:43:54 2010 +0200 @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn +uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO +vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB +AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo +REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss +/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J +s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut +sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/ +pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp +VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ +P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK +1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT +1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x +-----END RSA PRIVATE KEY----- diff -r d0529222e3f0 -r bd874ee5e5e2 homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_requestnotify_6.h --- a/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_requestnotify_6.h Fri Feb 19 23:07:29 2010 +0200 +++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/hspsconfigurationif/inc/mt_hsps_requestnotify_6.h Fri Mar 12 15:43:54 2010 +0200 @@ -339,9 +339,9 @@ // - Variant value 10, 5, -13,0,0,0, -54, -'P','l','u','g','i','n','U','p','d','a','t','e','d', +15,0,0,0, +62, +'P','l','u','g','i','n','I','n','s','t','a','l','l','e','d', // - Notification(Output)::appConfUid // - Variant name // - Version 1.0 @@ -800,8 +800,9 @@ // - Variant value 10, 5, -0,0,0,0, -2, +10,0,0,0, +42, +'0','x','2','0','0','0','b','1','1','0', // - Notification(Output)::origUid // - Variant name // - Version 1.0 @@ -846,9 +847,8 @@ // - Variant value 10, 5, -21,0,0,0, -86, -'I','n','s','t','a','l','l','e','d',' ','-',' ','W','i','d','g','e','t',' ','V','2', +0,0,0,0, +2, // - Notification(Output)::pluginUid // - Variant name // - Version 1.0 @@ -912,7 +912,7 @@ 5, 1,0,0,0, 6, -'0' +'9' }; const TInt requestnotify_6_ts_5_trigger = EHspsTriggerRunUninstallationCase; diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/inc/framework/aistateprovider.h --- a/idlefw/inc/framework/aistateprovider.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/inc/framework/aistateprovider.h Fri Mar 12 15:43:54 2010 +0200 @@ -23,7 +23,7 @@ #include #include #include -#include +#include // User includes #include @@ -56,14 +56,12 @@ /** * Two-phased constructor. */ - static CAiStateProvider* NewL( - MAiStateObserver& aObserver, CCoeEnv& aCoeEnv ); - + static CAiStateProvider* NewL( MAiStateObserver& aObserver ); + /** * Two-phased constructor. Leaving on stack */ - static CAiStateProvider* NewLC( - MAiStateObserver& aObserver, CCoeEnv& aCoeEnv ); + static CAiStateProvider* NewLC( MAiStateObserver& aObserver ); /** * Destructor @@ -81,9 +79,26 @@ /** * C++ default constructor */ - CAiStateProvider( - MAiStateObserver& aObserver, CCoeEnv& aCoeEnv ); - + CAiStateProvider( MAiStateObserver& aObserver ); + +public: + // new methods + + /** + * Start state providing + * + * @since S60 5.2 + * @param aCoeEnv Control environment + */ + void StartL( CCoeEnv& aCoeEnv ); + + /** + * Stop state providing + * + * @since S60 5.2 + */ + void Stop(); + private: // from MCoeMessageMonitorObserver @@ -167,13 +182,15 @@ /** State observer, Not owned */ MAiStateObserver& iObserver; /** Control environment, Not owned */ - CCoeEnv& iCoeEnv; + CCoeEnv* iCoeEnv; /** Light status observer, Owned */ CHWRMLight* iLightObserver; /** Skin server session, Owned */ RAknsSrvSession iSkinSrv; /** Backup Restore observer, Owned */ MAiPSPropertyObserver* iBackupRestoreObserver; + /** Flag to indicate whether state providing is started */ + TBool iStarted; private: // friend classes diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/devicestatus/inc/aicontentobserveroptimizer.h --- a/idlefw/plugins/devicestatus/inc/aicontentobserveroptimizer.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/devicestatus/inc/aicontentobserveroptimizer.h Fri Mar 12 15:43:54 2010 +0200 @@ -118,6 +118,11 @@ */ MAiContentObserver& Observer() const; + /** + * Clears blacklist + */ + void ClearBlackList(); + private: CAiContentObserverOptimizer(MAiContentObserver& aObserver); diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/devicestatus/inc/aimulticontentobserver.h --- a/idlefw/plugins/devicestatus/inc/aimulticontentobserver.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/devicestatus/inc/aimulticontentobserver.h Fri Mar 12 15:43:54 2010 +0200 @@ -77,6 +77,8 @@ const TDesC8& aPropertyValue, MAiContentObserver::TValueType aValueType); + void ClearBlackList(); + private: CAiMultiContentObserver(); void ConstructL(); diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/devicestatus/src/aicontentobserveroptimizer.cpp --- a/idlefw/plugins/devicestatus/src/aicontentobserveroptimizer.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/devicestatus/src/aicontentobserveroptimizer.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -228,6 +228,11 @@ return EFalse; } +void CAiContentObserverOptimizer::ClearBlackList() + { + iBlackList.Reset(); + } + CAiContentObserverOptimizer::CAiContentObserverOptimizer(MAiContentObserver& aObserver): iObserver( aObserver ) { diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/devicestatus/src/aidevicestatusplugin.cpp --- a/idlefw/plugins/devicestatus/src/aidevicestatusplugin.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/devicestatus/src/aidevicestatusplugin.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -186,12 +186,14 @@ // // ---------------------------------------------------------------------------- // -void CAiDeviceStatusPlugin::Start( TStartReason aReason ) - { - if ( aReason == EPageStartup || aReason == ESystemStartup ) +void CAiDeviceStatusPlugin::Start( TStartReason /*aReason*/ ) + { + iRequirePublish = ETrue; + + if ( iContentObservers ) { - iRequirePublish = ETrue; - } + iContentObservers->ClearBlackList(); + } } // ---------------------------------------------------------------------------- diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/devicestatus/src/aimulticontentobserver.cpp --- a/idlefw/plugins/devicestatus/src/aimulticontentobserver.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/devicestatus/src/aimulticontentobserver.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -240,7 +240,17 @@ return KErrNotSupported; } +void CAiMultiContentObserver::ClearBlackList() + { + const TInt count = iObserverOptimizers.Count(); + for ( TInt i = 0; i < count; ++i ) + { + iObserverOptimizers[i]->ClearBlackList(); + } + } + CAiMultiContentObserver::CAiMultiContentObserver() { } +// End of file diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/devicestatus/src/ainetworkinfolistener.cpp --- a/idlefw/plugins/devicestatus/src/ainetworkinfolistener.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/devicestatus/src/ainetworkinfolistener.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2005-2010 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" @@ -21,6 +21,8 @@ #include "ainetworkinfolistener.h" #include "ainetworkinfoobserver.h" #include "debug.h" +#include // for KErrGsmMMNetworkFailure +#include // for FeatureManager const TInt KAiMessageCacheGranularity = 4; @@ -39,7 +41,6 @@ //Create network handling engine session. iSession = CreateL( *this, iInfo ); - iShowOpInd = EFalse; //Create message cache iMessageCache = new( ELeave )CArrayFixFlat @@ -114,8 +115,7 @@ User::LeaveIfError( iObservers.Insert( &aObserver, freeSlot ) ); } } - - + void CAiNetworkInfoListener::RemoveObserver( MAiNetworkInfoObserver& aObserver ) { //Remove observer, removing is done by replacing it with NULL pointer. @@ -162,24 +162,19 @@ { err = KErrNone; } - if( err != KErrNone ) { - return; + return; } iShowOpInd = !NotAllowedToDisplayOperatorIndicator( aMessage ); - - + TBool hasNetInfoChanged = HasNetworkInfoChanged( aMessage ); - if ( !hasNetInfoChanged ) { return; } - __PRINT(__DBG_FORMAT("XAI: Show operator indicator %d, info changed %d"), iShowOpInd, hasNetInfoChanged ); - const TInt count( iObservers.Count() ); @@ -206,6 +201,9 @@ void CAiNetworkInfoListener::HandleNetworkError( const TNWOperation aOperation, TInt aErrorCode ) { __PRINT(__DBG_FORMAT("XAI: Error code %d"), aErrorCode ); + + TNWMessages errorCode = TNWMessages( KErrGeneral ); + switch ( aOperation ) { case MNWMessageObserver::ENWGetNetworkProviderName: @@ -228,14 +226,22 @@ iInfo.iPLMNField.Zero(); __PRINTS("XAI: SPN error received"); break; + case MNWMessageObserver::ENWNotifyNetworkRegistrationStatusChange: + if ( FeatureManager::FeatureSupported( KFeatureIdFfManualSelectionPopulatedPlmnList ) + && ( KErrGsmMMNetworkFailure == aErrorCode ) ) + { + errorCode = static_cast( aErrorCode ); + } + __PRINTS("XAI: ENWNotifyNetworkRegistrationStatusChange error received"); + + break; default: break; } - - HandleNetworkMessage( TNWMessages( KErrGeneral ) ); + + HandleNetworkMessage( errorCode ); } - - + TBool CAiNetworkInfoListener::NotAllowedToDisplayOperatorIndicator( const TNWMessages aMessage ) { // Service provider name must have been fetched. @@ -243,7 +249,8 @@ // Registration status and network information must have been received. // Operator name information must have been received. // Device must be camped to a network. - + + TBool csAlphaFlag( EFalse ); switch ( aMessage ) { case MNWMessageObserver::ENWMessageNetworkInfoChange: @@ -277,7 +284,24 @@ iReceivedMessageFlags &= ~( EProgrammableOperatorInfoReceived + EProgrammableOperatorInfoReceivedOk ); - break; + break; + case MNWMessageObserver::ENWMessageDynamicCapsChange: + TRAPD(fmerr, FeatureManager::InitializeLibL()); + if ( fmerr == KErrNone ) + { + if( FeatureManager::FeatureSupported( + KFeatureIdFfDisplayNetworkNameAfterCsRegistration )) + { + // CS flag is EFalse, alpha tag should not be shown. + if ( !( RPacketService::KCapsRxCSCall & + iInfo.iDynamicCapsFlags ) ) + { + csAlphaFlag = ETrue; + } + } + FeatureManager::UnInitializeLib(); + } + break; default: break; } @@ -298,7 +322,7 @@ !networkProviderNameFetched || !( registrationStatusReceived && networkInformationReceived && operatorNameInformationReceived ) || - !currentNetworkOk; + !currentNetworkOk || csAlphaFlag; } @@ -309,7 +333,9 @@ // pass through if ( aMessage == MNWMessageObserver::ENWMessageCurrentHomeZoneMessage || aMessage == MNWMessageObserver::ENWMessageNetworkConnectionFailure || - aMessage == MNWMessageObserver::ENWMessageCurrentCellInfoMessage ) + aMessage == MNWMessageObserver::ENWMessageCurrentCellInfoMessage || + aMessage == static_cast( KErrGsmMMNetworkFailure ) + ) { return result; } @@ -337,6 +363,17 @@ iOldInfo.iServiceProviderNameDisplayReq || iInfo.iNPName != iOldInfo.iNPName || iInfo.iPLMNField != iOldInfo.iPLMNField; + TRAPD(fmerr, FeatureManager::InitializeLibL()); + if ( fmerr == KErrNone ) + { + if( FeatureManager::FeatureSupported( + KFeatureIdFfDisplayNetworkNameAfterCsRegistration )) + { + result = result || + iInfo.iDynamicCapsFlags != iOldInfo.iDynamicCapsFlags; + } + FeatureManager::UnInitializeLib(); + } } iOldReceivedMessageFlags = iReceivedMessageFlags; diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/group/bld.inf --- a/idlefw/plugins/mcsplugin/group/bld.inf Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/group/bld.inf Fri Mar 12 15:43:54 2010 +0200 @@ -46,7 +46,9 @@ OPTION SOURCES -c8,8 qgn_prop_ai_shortcut -c8,8 qgn_menu_url \ -c8,8 qgn_menu_mce_sel_mes -c8,8 qgn_menu_mce_syncmail \ -c8,8 qgn_menu_am -c8,8 qgn_prop_cp_conn_shortcut \ - -c8,8 qgn_prop_psln_ai_sub -c8,8 qgn_mcsplugin_log_out + -c8,8 qgn_prop_psln_ai_sub -c8,8 qgn_mcsplugin_log_out \ + -c8,8 qgn_menu_mce_postcard -c8,8 qgn_menu_mce_email \ + -c8,8 qgn_menu_mce_audio -c8,8 qgn_menu_mce_gene END diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/group/mcsplugin.mmp --- a/idlefw/plugins/mcsplugin/group/mcsplugin.mmp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/group/mcsplugin.mmp Fri Mar 12 15:43:54 2010 +0200 @@ -77,6 +77,7 @@ LIBRARY gslauncher.lib LIBRARY eikdlg.lib LIBRARY commonengine.lib +LIBRARY favouritesengine.lib LIBRARY gfxtrans.lib diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h --- a/idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/inc/mcsplugindata.h Fri Mar 12 15:43:54 2010 +0200 @@ -25,6 +25,7 @@ #include #include #include +#include class TMenuItem; class CMCSPluginEngine; @@ -166,11 +167,16 @@ * @param aPluginName * @param aPluginUid * @param aPluginId - * @return TInt */ - TInt SettingsChangedL( const TDesC8& aEvent, const TDesC8& aPluginName, + void SettingsChangedL( const TDesC8& aEvent, const TDesC8& aPluginName, const TDesC8& aPluginUid, const TDesC8& aPluginId ); + /** + * CreateBkmMenuItemsL + * @param void + * @return void + */ + void CreateBkmMenuItemsL(); private: /** @@ -189,13 +195,19 @@ TMenuItem CreateMenuItemL( RPointerArray& aProperties ); + /** + * GetMCSPluginFolderIdL + * + * @return TInt + */ + TInt GetMCSPluginFolderIdL(); private: // data // Menu items, which are defined in settings // Own RArray iData; - // Plugin settings + // Plugin settings. NOT OWNED! HSPluginSettingsIf::CHomescreenSettings* iPluginSettings; // Reference to MCS plug-in engine @@ -203,6 +215,12 @@ // Reference to instance uid of HSPS widget const TDesC8& iInstanceUid; + + // MCS asynchronous operation watcher, owned + CMCSPluginWatcher* iSaveWatcher; + + // MCS resource handle, owned + RMenu iMenu; }; #endif // CMCSPLUGINDATA_H diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h --- a/idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/inc/mcspluginengine.h Fri Mar 12 15:43:54 2010 +0200 @@ -156,6 +156,23 @@ * ShowSettingsL */ void ShowSettingsL(); + + /** + * Helper method. Adds a given constant to a value of reference counter + * + * @param aItem A Menu Item to update + * @param aValueToAdd A constant to add + * @return The actual value of updated reference count + */ + TInt UpdateMenuItemsRefCountL( + CMenuItem* aItem, const TInt aValueToAdd ); + + /** + * CreateBkmMenuItemsL + * @param void + * @return void + */ + void CreateBkmMenuItemsL(); private: // from MMCSPluginWatcherObserver @@ -204,16 +221,6 @@ TBool ConstructMenuItemForIconL( const TDesC& aPath, CMenuItem& aMenuItem ); - /** - * Helper method. Adds a given constant to a value of reference counter - * - * @param aItem A Menu Item to update - * @param aValueToAdd A constant to add - * @return The actual value of updated reference count - */ - TInt UpdateMenuItemsRefCountL( - CMenuItem* aItem, const TInt aValueToAdd ); - private: // data diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugin.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -79,7 +79,7 @@ // ---------------------------------------------------------------------------- // void CMCSPlugin::ConstructL() - { + { } // ---------------------------------------------------------------------------- @@ -200,8 +200,12 @@ // // ---------------------------------------------------------------------------- // -void CMCSPlugin::Start( TStartReason /*aReason*/ ) - { +void CMCSPlugin::Start( TStartReason aReason ) + { + if( aReason == EPluginStartup ) + { + TRAP_IGNORE( iEngine->CreateBkmMenuItemsL() ); + } } // ---------------------------------------------------------------------------- diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcsplugindata.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -18,13 +18,14 @@ #include #include #include +#include +#include #include "mcsplugindata.h" #include "mcspluginengine.h" using namespace HSPluginSettingsIf; -_LIT8( KAppUid, "271012080" ); _LIT( KMenuAttrParam, "param" ); _LIT( KMenuAttrLocked, "locked" ); _LIT8( KProperNameType, "type" ); @@ -35,6 +36,15 @@ _LIT8( KProperValueBookmark, "bookmark" ); _LIT8( KProperValueAppl, "application" ); +_LIT( KUrl, "url" ); +_LIT( KMenuIconFile, "aimcsplugin.mif" ); +_LIT( KMenuIconId, "16386" ); +_LIT( KMenuMaskId, "16387" ); +_LIT( KInitialRefCount, "1" ); +_LIT( KMenuAttrRefcount, "ref_count" ); +_LIT( KMyMenuData, "matrixmenudata" ); + + // ======== LOCAL FUNCTIONS ======== static void ItemMapArrayCleanupFunc( TAny* aPointerArray ) @@ -95,10 +105,17 @@ // void CMCSPluginData::ConstructL() { - // AILaunch uid in decimal format - iPluginSettings = CHomescreenSettings::NewL( KAppUid, - iInstanceUid, - this ); + iPluginSettings = CHomescreenSettings::Instance(); + if( iPluginSettings == NULL ) + { + User::Leave( KErrUnknown ); + } + iPluginSettings->AddObserverL( this ); + + iSaveWatcher = CMCSPluginWatcher::NewL( CMCSPluginWatcher::EOperation ); + + iMenu.OpenL( KMyMenuData ); + UpdateDataL(); } @@ -107,9 +124,16 @@ // --------------------------------------------------------------------------- // CMCSPluginData::~CMCSPluginData() - { + { + if( iPluginSettings ) + { + iPluginSettings->RemoveObserver( this ); + } + iData.Close(); - delete iPluginSettings; + iMenu.Close(); + + delete iSaveWatcher; } // --------------------------------------------------------------------------- @@ -167,11 +191,13 @@ // // --------------------------------------------------------------------------- // -TInt CMCSPluginData::SettingsChangedL( const TDesC8& /*aEvent*/, const TDesC8& /*aPluginName*/, - const TDesC8& /*aPluginUid*/, const TDesC8& /*aPluginId*/ ) +void CMCSPluginData::SettingsChangedL( const TDesC8& /*aEvent*/, const TDesC8& /*aPluginName*/, + const TDesC8& /*aPluginUid*/, const TDesC8& aPluginId ) { - UpdateDataL(); - return KErrNone; + if( aPluginId.CompareF( iInstanceUid ) == 0 ) + { + UpdateDataL(); + } } // --------------------------------------------------------------------------- @@ -363,8 +389,152 @@ } } } - // ETrue tells that changes are stored also to plugin reference + // ETrue tells that changes are stored also to plugin reference iPluginSettings->SetSettingsL( iInstanceUid, settingItems, ETrue ); CleanupStack::PopAndDestroy( &settingItems ); } +// --------------------------------------------------------------------------- +// Gets MCS Plugin folder ID. This hidden folder in matrixmenudata.xml is used +// for storing run-time generated menuitems +// --------------------------------------------------------------------------- +// +TInt CMCSPluginData::GetMCSPluginFolderIdL() + { + TInt folderId; + + _LIT( KMCSFolder, "mcsplugin_folder" ); + + CMenuItem* item( NULL ); + CMenuFilter* filter = CMenuFilter::NewL(); + CleanupStack::PushL( filter ); + filter->SetType( KMenuTypeFolder ); + filter->HaveAttributeL( KMenuAttrLongName, KMCSFolder ); + + const TInt rootId = iMenu.RootFolderL(); + RArray itemArray; + CleanupClosePushL( itemArray ); + iMenu.GetItemsL( itemArray, rootId, filter, ETrue ); + if ( itemArray.Count() > 0 ) + { + item = CMenuItem::OpenL( iMenu, itemArray[0] ); + folderId = item->Id(); + } + else + { + folderId = iMenu.RootFolderL(); + } + CleanupStack::PopAndDestroy( &itemArray ); + CleanupStack::PopAndDestroy( filter ); + + delete item; + + return folderId; + } + +// --------------------------------------------------------------------------- +// Creates bookmark menu item if it does not exist +// --------------------------------------------------------------------------- +// +void CMCSPluginData::CreateBkmMenuItemsL() + { + RPointerArray settings; + TCleanupItem settingsCleanupItem( ItemMapArrayCleanupFunc, &settings ); + CleanupStack::PushL( settingsCleanupItem ); + iPluginSettings->GetSettingsL( iInstanceUid, settings ); + + RFavouritesSession bookmarkSess; + RFavouritesDb bookmarkDb; + + User::LeaveIfError( bookmarkSess.Connect() ); + User::LeaveIfError( bookmarkDb.Open( bookmarkSess, KBrowserBookmarks )); + + TInt count = settings.Count(); + for( TInt i = 0; i < count; i++ ) + { + CItemMap* itemMap = settings[i]; + RPointerArray& properties + = itemMap->Properties(); + + TPtrC8 uid8, type; + + for( TInt j = 0; j < properties.Count(); j++ ) + { + + if( properties[j]->Name() == KProperNameType ) + { + type.Set( properties[j]->Value() ); + } + else if ( properties[j]->Name() == KProperNameUid ) + { + uid8.Set( properties[j]->Value() ); + } + } + + if( type == KProperValueBookmark ) + { + TMenuItem menuItem = CreateMenuItemL( properties ); + + CActiveSchedulerWait* wait = + new ( ELeave ) CActiveSchedulerWait; + CleanupStack::PushL( wait ); + + if( menuItem.Id() == 0 ) + { + TLex8 uidLex( uid8.Mid( 1, uid8.Length() - 2 ) ); + TUint32 id; + uidLex.Val(id, EHex); + + CFavouritesItem* bkmItem = CFavouritesItem::NewLC(); + TInt bcount = bookmarkDb.Get( TInt32( id ), *bkmItem ); + + HBufC *uid( NULL ); + uid = AiUtility::CopyToBufferL( uid, uid8 ); + CleanupStack::PushL( uid ); + + CMenuItem* newItem = CMenuItem::CreateL( iMenu, + KMenuTypeUrl, + GetMCSPluginFolderIdL(), + 0 ); + CleanupStack::PushL( newItem ); + + newItem->SetAttributeL( KMenuAttrUid, *uid ); + newItem->SetAttributeL( KMenuAttrLongName, bkmItem->Name() ); + newItem->SetAttributeL( KMenuAttrIconFile, KMenuIconFile ); + newItem->SetAttributeL( KMenuAttrIconId, KMenuIconId ); + newItem->SetAttributeL( KMenuAttrMaskId, KMenuMaskId ); + newItem->SetAttributeL( KMenuAttrRefcount, KInitialRefCount ); + newItem->SetAttributeL( KUrl , bkmItem->Url() ); + + CMenuOperation* op = newItem->SaveL( iSaveWatcher->iStatus ); + TInt newId = newItem->Id(); + iData[i].MenuItem().SetId( newId ); + + iSaveWatcher->StopAndWatch( op, wait ); + + // Start the nested scheduler loop. + wait->Start(); + + CleanupStack::Pop( newItem ); + CleanupStack::PopAndDestroy( uid ); + CleanupStack::PopAndDestroy( bkmItem ); + } + else + { + CMenuItem* item = CMenuItem::OpenL( iMenu, menuItem ); + + if( iEngine.UpdateMenuItemsRefCountL( item, 1 ) > 0 ) + { + CMenuOperation* op = item->SaveL( iSaveWatcher->iStatus ); + iSaveWatcher->StopAndWatch( op, wait ); + // Start the nested scheduler loop. + wait->Start(); + } + } + + CleanupStack::PopAndDestroy( wait ); + wait = NULL; + } + } + CleanupStack::PopAndDestroy(); // settingsCleanupItem + } diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp --- a/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/publisher/src/mcspluginengine.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -139,7 +139,7 @@ filter = NULL; iUndefinedItem = CMenuItem::OpenL( iMenu, iUndefinedItemHeader ); } - + // ---------------------------------------------------------------------------- // CMCSPluginEngine::~CMCSPluginEngine // @@ -148,21 +148,21 @@ CMCSPluginEngine::~CMCSPluginEngine() { StopObserving(); - + delete iPluginData; - iNotifier.Close(); + iMenu.Close(); //iWatcher->Cancel(); delete iWatcher; - delete iNotifyWatcher; + CCoeEnv::Static()->DeleteResourceFile( iResourceOffset ); - + if ( iUndefinedItem ) { delete iUndefinedItem; iUndefinedItem = NULL; - } + } } // --------------------------------------------------------------------------- @@ -732,6 +732,10 @@ // void CMCSPluginEngine::CleanMCSItemsL() { + iNotifier.Close(); + delete iNotifyWatcher; + iNotifyWatcher = NULL; + const TInt count( iPluginData->DataCount() ); for( TInt i = 0; i < count; i++ ) @@ -829,5 +833,14 @@ return -1; } +// --------------------------------------------------------------------------- +// Creates bookmark menu item if it does not exist +// --------------------------------------------------------------------------- +// +void CMCSPluginEngine::CreateBkmMenuItemsL() + { + iPluginData->CreateBkmMenuItemsL(); + } + // End of file diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h --- a/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/inc/mcspluginsettingsmodel.h Fri Mar 12 15:43:54 2010 +0200 @@ -23,7 +23,6 @@ #include #include // For MDesCArray #include -#include #include #include @@ -66,7 +65,6 @@ */ class CMCSPluginSettingsModel : public CBase , public MDesCArray - , public HSPluginSettingsIf::MHomeScreenSettingsObserver { public: @@ -169,18 +167,12 @@ */ void UpdateSettingsContainerL( const TDesC8& aPluginId ); - // From MHomeScreenSettingsObserver /** - * Settings changed - * - * @param aEvent - * @param aPluginName - * @param aPluginUid - * @param aPluginId - * @return TInt - */ - TInt SettingsChangedL( const TDesC8& aEvent, const TDesC8& aPluginName, - const TDesC8& aPluginUid, const TDesC8& aPluginId ); + * Update settings model + * + * @param aPluginId + */ + void UpdateSettingModelL( const TDesC8& aPluginId ); private: @@ -256,7 +248,7 @@ */ RArray iSettings; - // Homescreen settings API + // Homescreen settings API. NOT OWNED! HSPluginSettingsIf::CHomescreenSettings* iPluginSettings; HBufC8* iPluginId; diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettings.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -196,7 +196,7 @@ } cba->DrawDeferred(); } - + iModel->UpdateSettingModelL( aCustomMessage); CGSBaseView::DoActivateL(aPrevViewId, aCustomMessageId, aCustomMessage); iModel->UpdateSettingsContainerL( aCustomMessage ); diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingscontainer.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -333,13 +333,18 @@ // void CMCSPluginSettingsContainer::ConstructListBoxL(TInt /*aResLbxId*/) { - iListBox->ConstructL(this, EAknListBoxSelectionList); - + iListBox->ConstructL(this, EAknListBoxSelectionList); // Set empty listbox's text. - HBufC* text = iCoeEnv->AllocReadResourceLC(R_AI_MCS_SETTINGS_TXT_ALL_FIXED); - iListBox->View()->SetListEmptyTextL(*text); - CleanupStack::PopAndDestroy(text); - + if (iModel->MdcaCount() == 0) + { + HBufC* text = iCoeEnv->AllocReadResourceLC(R_AI_MCS_SETTINGS_TXT_ALL_FIXED); + iListBox->View()->SetListEmptyTextL(*text); + CleanupStack::PopAndDestroy(text); + } + else + { + iListBox->View()->SetListEmptyTextL(KNullDesC); + } iListBox->Model()->SetItemTextArray(iModel); iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray); } diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -52,8 +52,6 @@ _LIT8( KProperValueBookmark, "bookmark" ); _LIT8( KProperValueAppl, "application" ); - - using namespace HSPluginSettingsIf; // ----------------------------------------------------------------------------- @@ -136,10 +134,12 @@ { delete iAppList; delete iBkmList; - iSettings.Reset(); - delete iPluginSettings; + iSettings.Reset(); delete iPluginId; delete iListBoxLine; + + CHomescreenSettings::UnInitialize(); + iPluginSettings = NULL; } // --------------------------------------------------------------------------- @@ -148,6 +148,14 @@ // void CMCSPluginSettingsModel::ConstructL() { + CHomescreenSettings::InitializeL( KAppUid ); + + iPluginSettings = CHomescreenSettings::Instance(); + if( iPluginSettings == NULL ) + { + User::Leave( KErrUnknown ); + } + iAppList = CMCSPluginSettingsAppList::NewL(); iAppList->StartL(); iBkmList = CMCSPluginSettingsBkmList::NewL(); @@ -164,13 +172,46 @@ { return; } - if( !iPluginSettings ) + + if( iPluginId ) + { + delete iPluginId; + iPluginId = NULL; + } + iPluginId = aPluginId.AllocL(); + + iSettings.Reset(); + RPointerArray settingItems; + CleanupClosePushL( settingItems ); + + iPluginSettings->GetSettingsL( *iPluginId, settingItems ); + + TInt count = settingItems.Count(); + for ( TInt i = 0; i < count; i++ ) { - // AILaunch uid in decimal format - iPluginSettings = CHomescreenSettings::NewL( KAppUid, aPluginId, this ); - iPluginId = aPluginId.AllocL(); + CItemMap* itemMap = settingItems[i]; + RPointerArray properties; + properties = itemMap->Properties(); + TSettingItem item = ItemL( properties ); + iSettings.AppendL( item ); } + CleanupStack::Pop( &settingItems ); + settingItems.ResetAndDestroy(); + } +// --------------------------------------------------------------------------- +// Gets the latest settings from HSPS and updates +// --------------------------------------------------------------------------- +// +void CMCSPluginSettingsModel::UpdateSettingModelL( const TDesC8& aPluginId ) + { + if( iPluginId ) + { + delete iPluginId; + iPluginId = NULL; + } + iPluginId = aPluginId.AllocL(); + iSettings.Reset(); RPointerArray settingItems; CleanupClosePushL( settingItems ); @@ -274,12 +315,12 @@ // void CMCSPluginSettingsModel::SaveSettingsL( const TInt& aIndex, CMenuItem& aMenuItem ) - { - - if ( !iPluginSettings ) + { + if( !iPluginId ) { return; } + RPointerArray settingItems; CleanupClosePushL( settingItems ); iPluginSettings->GetSettingsL( *iPluginId, settingItems ); @@ -426,18 +467,6 @@ } // --------------------------------------------------------------------------- -// From MHomeScreenSettingsObserver - handler for HSPS setting change -// --------------------------------------------------------------------------- -// -TInt CMCSPluginSettingsModel::SettingsChangedL( const TDesC8& /*aEvent*/, - const TDesC8& /*aPluginName*/, - const TDesC8& /*aPluginUid*/, - const TDesC8& /*aPluginId*/ ) - { - return KErrNone; - } - -// --------------------------------------------------------------------------- // From MDesCArray // Returns the number of descriptor elements in a descriptor array. // --------------------------------------------------------------------------- diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/profileplugin/inc/caiprofileengine.h --- a/idlefw/plugins/profileplugin/inc/caiprofileengine.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/profileplugin/inc/caiprofileengine.h Fri Mar 12 15:43:54 2010 +0200 @@ -129,7 +129,9 @@ void HandleEditActiveProfileL(); TBool ShowOfflineMessageL(); - + + void DetermineTimedAndSilentStatesL(); + void NotifyContentUpdate(); private: @@ -184,6 +186,10 @@ RPointerArray< HBufC > iProfileNamePointerArray; /** Resource loader, owned */ RConeResourceLoader iResourceLoader; + /** Flag to indicate whether active profile is timed */ + TBool iTimed; + /** Flag to indicate whether active profile is silent */ + TBool iSilent; }; #endif // CAIPROFILEENGINE_H diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/profileplugin/inc/caiprofileplugin.h --- a/idlefw/plugins/profileplugin/inc/caiprofileplugin.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/profileplugin/inc/caiprofileplugin.h Fri Mar 12 15:43:54 2010 +0200 @@ -178,6 +178,8 @@ HBufC* iActiveProfileAndChar; /** Previous profile, owned */ HBufC* iPreviousProfileNameAndChar; + /** Flag to indicate whether publish is required */ + TBool iPublishRequired; }; #endif // CAIPROFILEPLUGIN_H diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/profileplugin/src/caiprofileengine.cpp --- a/idlefw/plugins/profileplugin/src/caiprofileengine.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/profileplugin/src/caiprofileengine.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -124,7 +125,9 @@ iProfileNotifier->RequestActiveProfileNotificationsL( *this ); iProfileNotifier->RequestProfileNameArrayNotificationsL( *this ); - iProfileNotifier->RequestProfileActivationNotificationsL( *this ); + iProfileNotifier->RequestProfileActivationNotificationsL( *this ); + + DetermineTimedAndSilentStatesL(); } // ---------------------------------------------------------------------------- @@ -156,7 +159,30 @@ iResourceLoader.Close(); } + +// ---------------------------------------------------------------------------- +// CAiProfileEngine::DetermineTimedAndSilentStatesL() +// +// ---------------------------------------------------------------------------- +// +void CAiProfileEngine::DetermineTimedAndSilentStatesL() + { + iTimed = EFalse; + iSilent = EFalse; + MProfileEngine* engine = CreateProfileEngineL(); + + iTimed = engine->IsActiveProfileTimedL(); + + MProfile* profile = engine->ActiveProfileLC(); + + iSilent = profile->IsSilent(); + + CleanupStack::PopAndDestroy(); // profile + + engine->Release(); + } + // ---------------------------------------------------------------------------- // CAiProfileEngine::UpdateProfileNamesL() // @@ -371,13 +397,7 @@ // TBool CAiProfileEngine::IsActiveProfileSilentL() const { - MProEngProfile* profile( iProfileEngine->ActiveProfileLC() ); - - TBool silent( profile->IsSilent() ); - - CleanupStack::PopAndDestroy(); - - return silent; + return iSilent; } // ---------------------------------------------------------------------------- @@ -387,15 +407,7 @@ // TBool CAiProfileEngine::IsActiveProfileTimedL() const { - MProfileEngine* engine = CreateProfileEngineL(); - - TBool retval( EFalse ); - - TRAP_IGNORE( retval = engine->IsActiveProfileTimedL() ); - - engine->Release(); - - return retval; + return iTimed; } // ---------------------------------------------------------------------------- @@ -622,6 +634,8 @@ // void CAiProfileEngine::HandleActiveProfileModifiedL() { + DetermineTimedAndSilentStatesL(); + NotifyContentUpdate(); } @@ -642,6 +656,8 @@ // void CAiProfileEngine::HandleProfileActivatedL( TInt /*aProfileId*/ ) { + DetermineTimedAndSilentStatesL(); + NotifyContentUpdate(); } diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/profileplugin/src/caiprofileplugin.cpp --- a/idlefw/plugins/profileplugin/src/caiprofileplugin.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/profileplugin/src/caiprofileplugin.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -76,9 +76,18 @@ // void CAiProfilePlugin::ConstructL() { - iContent = AiUtility::CreateContentItemArrayIteratorL( KAiProfileContent ); - iEvents = AiUtility::CreateContentItemArrayIteratorL( KAiProfileEvents ); - iResources = AiUtility::CreateContentItemArrayIteratorL( KAiProfileResources ); + iContent = + AiUtility::CreateContentItemArrayIteratorL( KAiProfileContent ); + + iEvents = + AiUtility::CreateContentItemArrayIteratorL( KAiProfileEvents ); + + iResources = + AiUtility::CreateContentItemArrayIteratorL( KAiProfileResources ); + + iEngine = CAiProfileEngine::NewL( this ); + + iEngine->UpdateProfileNamesL(); } // --------------------------------------------------------------------------- @@ -87,9 +96,7 @@ // --------------------------------------------------------------------------- // CAiProfilePlugin::~CAiProfilePlugin() - { - CleanPublishedProfileNames(); - + { Release( iContent ); Release( iEvents ); Release( iResources ); @@ -289,6 +296,7 @@ // void CAiProfilePlugin::Start( TStartReason /*aReason*/ ) { + iPublishRequired = ETrue; } // --------------------------------------------------------------------------- @@ -298,6 +306,7 @@ // void CAiProfilePlugin::Stop( TStopReason /*aReason*/ ) { + CleanPublishedProfileNames(); } // --------------------------------------------------------------------------- @@ -381,13 +390,11 @@ // void CAiProfilePlugin::DoResumeL() { - if( !iEngine ) + if ( iPublishRequired ) { - iEngine = CAiProfileEngine::NewL( this ); + iPublishRequired = EFalse; - iEngine->UpdateProfileNamesL(); - - PublishL(); + PublishL(); } } @@ -398,7 +405,9 @@ // void CAiProfilePlugin::NotifyContentUpdate() { - TRAP_IGNORE( PublishL() ); + iPublishRequired = ETrue; + + TRAP_IGNORE( DoResumeL() ); } // --------------------------------------------------------------------------- @@ -419,6 +428,11 @@ observer->Clean( *this, EAiProfileContentProfileName, j + 1 ); } } + + delete iPreviousProfileNameAndChar; + iPreviousProfileNameAndChar = NULL; + + iPreviousCount = 0; } // ======== GLOBAL FUNCTIONS ======== diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/sapidataplugin/inc/sapidata.h --- a/idlefw/plugins/sapidataplugin/inc/sapidata.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/inc/sapidata.h Fri Mar 12 15:43:54 2010 +0200 @@ -153,6 +153,15 @@ void ChangePublisherStatusL(const TDesC& aStatus); /** + * Triggers active event with KNoNotification option. + * Notification is not send to observer, action handler + * plug-ins are executed + * + * @return void + */ + void TriggerActiveL(); + + /** * Configures the subscriber and data to subscribe. * * @param aConfigurations Information about the subscriber diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/sapidataplugin/src/sapidata.cpp --- a/idlefw/plugins/sapidataplugin/src/sapidata.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/src/sapidata.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -27,6 +27,7 @@ #include "sapidataobserver.h" #include "sapidataplugin.h" +const TUint KDisableNotification = 0x2000; // ======== MEMBER FUNCTIONS ======== // --------------------------------------------------------------------------- @@ -758,6 +759,36 @@ } // --------------------------------------------------------------------------- +// TriggerActiveL +// --------------------------------------------------------------------------- +// +void CSapiData::TriggerActiveL() + { + + CLiwGenericParamList* inParamList = &iServiceHandler->InParamListL(); + CLiwGenericParamList* outParamList = &iServiceHandler->OutParamListL(); + + TLiwGenericParam type( KType, TLiwVariant( KPubData ) ); + inParamList->AppendL( type ); + + CLiwDefaultMap* filter = CreateFilterLC( KAll(), KAll() ); + filter->InsertL(KActionTrigger, TLiwVariant( KActive() )); + + TLiwGenericParam item( KFilter, TLiwVariant( filter )); + inParamList->AppendL( item ); + if(iInterface) + { + iInterface->ExecuteCmdL( KExecuteAction, *inParamList, *outParamList, KDisableNotification ); + } + else + { + User::Leave( KErrNotSupported ); + } + CleanupStack::PopAndDestroy( filter ); + inParamList->Reset(); + outParamList->Reset(); + } +// --------------------------------------------------------------------------- // UpdatePublisherStatusL // --------------------------------------------------------------------------- // diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp --- a/idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/plugins/sapidataplugin/src/sapidataplugin.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -602,10 +602,11 @@ // Activate the publisher iData->ChangePublisherStatusL( KActive ); + iData->TriggerActiveL(); // Register for notifications iData->RegisterPublisherObserverL(); - + PublishL(); iPluginState = ESuspend; diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/src/framework/aifw.cpp --- a/idlefw/src/framework/aifw.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/src/framework/aifw.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -64,6 +64,8 @@ // void CAiFw::ConstructL() { + __PRINTS( "*** CAiFw::ConstructL" ); + __TIME_MARK( time ); #if 0 // For AI3_test RProcess proc; @@ -102,8 +104,14 @@ iFactory = CAiPluginFactory::NewL( *iUiControllerManager ); iStateManager = CAiStateManager::NewL( *iFactory ); - - iEventHandler = CAiEventHandler::NewL( *iFactory ); + + iStateProvider = CAiStateProvider::NewL( *iStateManager ); + + iEventHandler = CAiEventHandler::NewL( *iFactory ); + + iUiControllerManager->SetStateHandler( *iStateProvider ); + + __TIME_ENDMARK( "CAiFw::ConstructL, done", time ); } // ---------------------------------------------------------------------------- @@ -113,13 +121,14 @@ // EXPORT_C CAiFw* CAiFw::NewLC() { + __TICK( "CAiFw::NewLC" ); + CAiFw* self = new ( ELeave ) CAiFw; CleanupStack::PushL( self ); self->ConstructL(); - __TICK( "FW: Core FW constructed" ); - __HEAP( "FW: Core FW constructed" ); + __PRINTS( "*** CAiFw::NewLC - done" ); return self; } @@ -183,14 +192,22 @@ // EXPORT_C void CAiFw::RunL() { - CAiIdleAppRegister* idleReg = CAiIdleAppRegister::NewLC(); - idleReg->RegisterL(); - CleanupStack::PopAndDestroy( idleReg ); + __TICK( "CAiFw::RunL" ); + + __PRINTS( "*** CAiFw::RunL - CAiIdleAppRegister::NewLC" ); + __TIME_MARK( time ); + + CAiIdleAppRegister* registry = CAiIdleAppRegister::NewLC(); + registry->RegisterL(); + CleanupStack::PopAndDestroy( registry ); + __TIME_ENDMARK( "CAiFw::RunL - CAiIdleAppRegister::NewLC, done", time ); + // Tell UI controller manager to start application framework and event loop. - // This function returns only when the application is shut down. - // See in CAiFw::HandleUiReadyEventL how the framework initialization continues. + // This function returns only when the application is shut down. iUiControllerManager->RunApplicationL(); + + __PRINTS( "*** CAiFw::RunL - done" ); } // ---------------------------------------------------------------------------- @@ -200,6 +217,9 @@ // void CAiFw::AppEnvReadyL() { + __TICK( "CAiFw::AppEnvReadyL" ); + __TIME_MARK( time ); + // Initialize members which need to be connected to the app environment's // active scheduler or depend on the app environment being initialized. @@ -208,10 +228,9 @@ // Create WS pluign manager iWsPluginManager = CAiWsPluginManager::NewL( env ); - iStateProvider = CAiStateProvider::NewL( *iStateManager, env ); - - iUiControllerManager->SetStateHandler( *iStateProvider ); - + // Start state provider + iStateProvider->StartL( env ); + // CenRep notifier to listen key changes in cenrep. // Application is restarted if key value is changed. iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository, @@ -227,7 +246,9 @@ iIdleRestartObserver = AiUtility::CreatePSPropertyObserverL( TCallBack( HandleRestartEvent, this ), - KPSUidAiInformation, KActiveIdleRestartAI2 ); + KPSUidAiInformation, KActiveIdleRestartAI2 ); + + __PRINTS( "*** CAiFw::AppEnvReadyL - done" ); } // ---------------------------------------------------------------------------- @@ -237,23 +258,26 @@ // void CAiFw::HandleUiReadyEventL( CAiUiController& aUiController ) { + __TICK( "CAiFw::HandleUiReadyEventL" ); + if ( iUiControllerManager->IsMainUiController( aUiController ) ) - { + { TInt value( EIdlePhase1Ok ); - RProperty::Get( KPSUidStartup, - KPSIdlePhase1Ok, - value ); - + RProperty::Get( KPSUidStartup, KPSIdlePhase1Ok, value ); + if ( value == EIdlePhase1NOK ) { - RProperty::Set( KPSUidStartup, - KPSIdlePhase1Ok, - EIdlePhase1Ok ); - } - + __TICK( "CAiFw::HandleUiReadyEventL - Setting EIdlePhase1Ok" ); + + RProperty::Set( KPSUidStartup, KPSIdlePhase1Ok, EIdlePhase1Ok ); + } + if ( !iLibrariesLoaded ) { + __PRINTS( "*** CAiFw::HandleUiReadyEventL - load libraries" ); + __TIME_MARK( time ); + _LIT( KAIVoiceUIDialer, "VoiceUiNameDialer.dll" ); _LIT( KAIVoiceUIRecog, "VoiceUiRecognition.dll" ); _LIT( KAIVCommandHandler, "vcommandhandler.dll" ); @@ -263,10 +287,12 @@ iLibrary3.Load( KAIVCommandHandler ); iLibrariesLoaded = ETrue; - } - - iUiControllerManager->LoadUIDefinition(); + + __TIME_ENDMARK( "CAiFw::HandleUiReadyEventL - load libraries, done", time ); + } } + + __PRINTS( "*** CAiFw::HandleUiReadyEventL - done" ); } // --------------------------------------------------------------------------- @@ -276,7 +302,14 @@ // void CAiFw::HandleActivateUI() { - iUiControllerManager->ActivateUI(); + __PRINTS( "*** CAiFw::HandleActivateUI" ); + __TIME_MARK( time ); + + iUiControllerManager->LoadUIDefinition(); + + iUiControllerManager->ActivateUI(); + + __TIME_ENDMARK( "CAiFw::HandleActivateUI, done", time ); } // --------------------------------------------------------------------------- @@ -312,8 +345,7 @@ Release( iIdleRestartObserver ); iIdleRestartObserver = NULL; - delete iStateProvider; - iStateProvider = NULL; + iStateProvider->Stop(); } } diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/src/framework/aipluginfactory.cpp --- a/idlefw/src/framework/aipluginfactory.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/src/framework/aipluginfactory.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -34,19 +34,30 @@ const TUid KDeviceStatusPluginUid = { AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_DEVSTAPLUGIN }; +const TUid KProfilePluginUid = + { AI_UID_ECOM_IMPLEMENTATION_CONTENTPUBLISHER_PROFILEPLUGIN }; + _LIT( KDeviceStatusPluginName, "DeviceStatus" ); +_LIT( KProfilePluginName, "Profile" ); // ======== LOCAL FUNCTIONS ======== // ---------------------------------------------------------------------------- -// IsDeviceStatus() +// IsRecyclable() // // ---------------------------------------------------------------------------- // -TBool IsDeviceStatus( const THsPublisherInfo& aInfo ) +TBool IsRecyclable( const THsPublisherInfo& aInfo ) { - return ( aInfo.Name() == KDeviceStatusPluginName && - aInfo.Uid() == KDeviceStatusPluginUid ); + if ( ( aInfo.Name() == KProfilePluginName && + aInfo.Uid() == KProfilePluginUid ) || + ( aInfo.Name() == KDeviceStatusPluginName && + aInfo.Uid() == KDeviceStatusPluginUid ) ) + { + return ETrue; + } + + return EFalse; } // ---------------------------------------------------------------------------- @@ -136,19 +147,19 @@ { __PRINTS( "*** CAiPluginFactory::CreatePlugin: Start ***" ); - if ( IsDeviceStatus( aPublisherInfo ) ) + if ( IsRecyclable( aPublisherInfo ) ) { CHsContentPublisher* plugin( PluginByUid( aPublisherInfo.Uid() ) ); if ( plugin ) { - // Devicestatus plugin already exists, update its namespace + // Plugin already exists, update its namespace THsPublisherInfo& info( const_cast< THsPublisherInfo& >( plugin->PublisherInfo() ) ); info.iNamespace.Copy( aPublisherInfo.Namespace() ); - __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done - DeviceStatus plugin updated ***" ); + __PRINTS( "*** CAiPluginFactory::CreatePlugin: Done - Plugin recycled ***" ); return KErrNone; } @@ -202,10 +213,10 @@ { __PRINTS( "*** CAiPluginFactory::DestroyPlugin: Start ***" ); - if ( IsDeviceStatus( aPublisherInfo ) ) + if ( IsRecyclable( aPublisherInfo ) ) { - // Don't destroy device status plugin - __PRINTS( "*** CAiPluginFactory::DestroyPlugin: Done - Keepind DeviceStatus Plug-in ***" ); + // Don't destroy recyclable plugin + __PRINTS( "*** CAiPluginFactory::DestroyPlugin: Done - Keeping recyclable Plug-in ***" ); return; } @@ -234,12 +245,13 @@ __PRINT( __DBG_FORMAT( "\t[I]\t Loading plug-in uid=%x name=%S"), aPublisherInfo.Uid(), &(aPublisherInfo.Name() ) ); - __TIME( "FW: Create plug-in:", - - iPublishers.ReserveL( iPublishers.Count() + 1 ); - - CHsContentPublisher* plugin = - CHsContentPublisher::NewL( aPublisherInfo ) ); + iPublishers.ReserveL( iPublishers.Count() + 1 ); + + CHsContentPublisher* plugin( NULL ); + + __TIME( "CAiPluginFactory::CreatePluginL Create plug-in:", + plugin = CHsContentPublisher::NewL( aPublisherInfo ) ); + CleanupStack::PushL( plugin ); __TIME( "FW: Subscribe content observers", diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/src/framework/aistatemanager.cpp --- a/idlefw/src/framework/aistatemanager.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/src/framework/aistatemanager.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -370,7 +370,7 @@ void CAiStateManager::ProcessStateChange( TState aNextState ) { __PRINT( __DBG_FORMAT( - "CAiStateManager::ProcessStateChange: current state: %d, next state: %d, halt: &d" ), + "CAiStateManager::ProcessStateChange: current state: %d, next state: %d, halt: %d" ), (TInt)iCurrentState, (TInt)aNextState, iHalt ); __TIME_MARK( time ); @@ -510,28 +510,41 @@ // void CAiStateManager::StartPlugin( CHsContentPublisher& aPlugin, CHsContentPublisher::TStartReason aReason ) - { - __PRINTS( "CAiStateManager::StartPlugin" ); + { + const THsPublisherInfo& info( aPlugin.PublisherInfo() ); + + __PRINT( __DBG_FORMAT( + "CAiStateManager::StartPlugin: name: %S, reason: %d" ), &info.Name(), (TInt)aReason ); aPlugin.Start( aReason ); if ( iCurrentState == EAlive ) { - aPlugin.Resume( CHsContentPublisher::EForeground ); + __TIME( "CAiStateManager::StartPlugin, enter EAlive", + + aPlugin.Resume( CHsContentPublisher::EForeground ) ); } else if ( iCurrentState == ESuspended ) { - aPlugin.Suspend( CHsContentPublisher::EBackground ); + __TIME( "CAiStateManager::StartPlugin, enter ESuspended", + + aPlugin.Suspend( CHsContentPublisher::EBackground ) ); } if ( iFlags.IsSet( EIsOnline ) ) { - aPlugin.SetOnline(); + __TIME( "CAiStateManager::StartPlugin, Set Online", + + aPlugin.SetOnline() ); } else { - aPlugin.SetOffline(); + __TIME( "CAiStateManager::StartPlugin, Set Offline", + + aPlugin.SetOffline() ); } + + __PRINTS( "CAiStateManager::StartPlugin - done" ); } // ---------------------------------------------------------------------------- @@ -542,14 +555,21 @@ void CAiStateManager::StopPlugin( CHsContentPublisher& aPlugin, CHsContentPublisher::TStopReason aReason ) { - __PRINTS( "CAiStateManager::StopPlugin" ); - + const THsPublisherInfo& info( aPlugin.PublisherInfo() ); + + __PRINT( __DBG_FORMAT( + "CAiStateManager::StopPlugin: name: %S, reason: %d" ), &info.Name(), (TInt)aReason ); + if ( iCurrentState == EAlive ) { - aPlugin.Suspend( CHsContentPublisher::EBackground ); + __TIME( "CAiStateManager::StopPlugin, enter ESuspended", + + aPlugin.Suspend( CHsContentPublisher::EBackground ) ); } - aPlugin.Stop( aReason ); + aPlugin.Stop( aReason ); + + __PRINTS( "CAiStateManager::StopPlugin - done" ); } // ---------------------------------------------------------------------------- diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/src/framework/aistateprovider.cpp --- a/idlefw/src/framework/aistateprovider.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/src/framework/aistateprovider.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -40,11 +40,10 @@ // Two-phased constructor. // ---------------------------------------------------------------------------- // -CAiStateProvider* CAiStateProvider::NewL( - MAiStateObserver& aObserver, CCoeEnv& aCoeEnv ) +CAiStateProvider* CAiStateProvider::NewL( MAiStateObserver& aObserver ) { CAiStateProvider* self = - CAiStateProvider::NewLC( aObserver, aCoeEnv ); + CAiStateProvider::NewLC( aObserver ); CleanupStack::Pop( self ); @@ -56,11 +55,10 @@ // Two-phased constructor. // ---------------------------------------------------------------------------- // -CAiStateProvider* CAiStateProvider::NewLC( - MAiStateObserver& aObserver, CCoeEnv& aCoeEnv ) +CAiStateProvider* CAiStateProvider::NewLC( MAiStateObserver& aObserver ) { CAiStateProvider* self = - new ( ELeave ) CAiStateProvider( aObserver, aCoeEnv ); + new ( ELeave ) CAiStateProvider( aObserver ); CleanupStack::PushL( self ); self->ConstructL(); @@ -74,18 +72,8 @@ // ---------------------------------------------------------------------------- // CAiStateProvider::~CAiStateProvider() - { - iObserver.NotifyStateChange( EAiFwUiShutdown ); - - iCoeEnv.RemoveMessageMonitorObserver( *this ); - - delete iEcomObserver; - - iSkinSrv.Close(); - - Release( iBackupRestoreObserver ); - - delete iLightObserver; + { + Stop(); } // ---------------------------------------------------------------------------- @@ -93,11 +81,9 @@ // C++ default constructor. // ---------------------------------------------------------------------------- // -CAiStateProvider::CAiStateProvider( MAiStateObserver& aObserver, - CCoeEnv& aCoeEnv ) - : iObserver( aObserver ), iCoeEnv( aCoeEnv ) - { - iObserver.NotifyStateChange( EAiFwUiStartup ); +CAiStateProvider::CAiStateProvider( MAiStateObserver& aObserver ) + : iObserver( aObserver ) + { } // ---------------------------------------------------------------------------- @@ -107,18 +93,69 @@ // void CAiStateProvider::ConstructL() { - iLightObserver = CHWRMLight::NewL( this ); - - iBackupRestoreObserver = AiUtility::CreatePSPropertyObserverL( - TCallBack( BackupRestoreEvent, this ), - KUidSystemCategory, conn::KUidBackupRestoreKey ); - - User::LeaveIfError( iSkinSrv.Connect( this ) ); - - iEcomObserver = CAiEcomObserver::NewL(); - iEcomObserver->AddObserverL( this ); - - iCoeEnv.AddMessageMonitorObserverL( *this ); + } + +// ---------------------------------------------------------------------------- +// CAiStateProvider::StartL() +// +// ---------------------------------------------------------------------------- +// +void CAiStateProvider::StartL( CCoeEnv& aCoeEnv ) + { + if ( !iStarted ) + { + iStarted = ETrue; + + iObserver.NotifyStateChange( EAiFwUiStartup ); + + iLightObserver = CHWRMLight::NewL( this ); + + iBackupRestoreObserver = AiUtility::CreatePSPropertyObserverL( + TCallBack( BackupRestoreEvent, this ), + KUidSystemCategory, conn::KUidBackupRestoreKey ); + + User::LeaveIfError( iSkinSrv.Connect( this ) ); + + iEcomObserver = CAiEcomObserver::NewL(); + iEcomObserver->AddObserverL( this ); + + iCoeEnv = &aCoeEnv; + + iCoeEnv->AddMessageMonitorObserverL( *this ); + } + } + +// ---------------------------------------------------------------------------- +// CAiStateProvider::Stop() +// +// ---------------------------------------------------------------------------- +// +void CAiStateProvider::Stop() + { + if ( iStarted ) + { + iStarted = EFalse; + + iObserver.NotifyStateChange( EAiFwUiShutdown ); + + if ( iCoeEnv ) + { + iCoeEnv->RemoveMessageMonitorObserver( *this ); + } + + iCoeEnv = NULL; + + delete iEcomObserver; + iEcomObserver = NULL; + + iSkinSrv.Close(); + + Release( iBackupRestoreObserver ); + iBackupRestoreObserver = NULL; + + delete iLightObserver; + iLightObserver = NULL; + } } // ---------------------------------------------------------------------------- diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/src/idleint/aiuiidleintegration.cpp --- a/idlefw/src/idleint/aiuiidleintegration.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/src/idleint/aiuiidleintegration.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -11,35 +11,30 @@ * * Contributors: * -* Description: Window server plug-in manager. +* Description: Idle integration * */ -#include "aiuiidleintegrationimpl.h" -#include "aifweventhandler.h" - -#include +// System includes #include #include -#include #include #include -#include #include -#include -#include +#include + +// User includes +#include #include #include -#include - +#include "activeidle2domainpskeys.h" +#include "aiuiidleintegrationimpl.h" +#include "aifweventhandler.h" #include "aistate.h" #include "aifwpanic.h" -#include "activeidle2domainpskeys.h" +#include "debug.h" -#include - -#include // ======== MEMBER FUNCTIONS ======== @@ -70,10 +65,6 @@ delete iIncallBubble; - Release( iSystemStateObserver ); - - Release( iUiStartupStateObserver ); - Release( iCallStatusObserver ); } @@ -95,6 +86,9 @@ void CAiUiIdleIntegrationImpl::ConstructL( const TAiIdleKeySoundConfig& aKeySoundConfig ) { + __PRINTS( "*** CAiUiIdleIntegrationImpl::ConstructL" ); + __TIME_MARK( time ); + iIncallBubble = CAknIncallBubble::NewL(); iActiveIdleState = CActiveIdleState::NewL(); @@ -102,39 +96,32 @@ // Set up keysounds if( aKeySoundConfig.iKeySounds ) { - aKeySoundConfig.iKeySounds - ->PushContextL( aKeySoundConfig.iContextResId ); + aKeySoundConfig.iKeySounds->PushContextL( + aKeySoundConfig.iContextResId ); } iEikEnv.SetSystem( ETrue ); - - // Eikon server window group - iThisApplicationWgId = iEikEnv.RootWin().Identifier(); + + TInt wgId( iEikEnv.RootWin().Identifier() ); + TInt focusWgId( iEikEnv.WsSession().GetFocusWindowGroup() ); - CApaWindowGroupName::FindByAppUid( KAknCapServerUid, - iEikEnv.WsSession(), - iEikonServerWgId ); - - iActiveIdleState->SetIsIdleForeground( iThisApplicationForeground ); + if ( focusWgId == wgId ) + { + __PRINTS( "*** CAiUiIdleIntegrationImpl::ConstructL - iForeground: 1" ); + + iForeground = ETrue; + } + + iActiveIdleState->SetIsIdleForeground( iForeground ); - iSystemStateObserver = AiUtility::CreatePSPropertyObserverL( - TCallBack( HandleSystemStateChange, this ), - KPSUidStartup, - KPSGlobalSystemState ); - - iUiStartupStateObserver = AiUtility::CreatePSPropertyObserverL( - TCallBack( HandleUiStartupStateChange, this ), - KPSUidStartup, - KPSStartupUiPhase ); - iCallStatusObserver = AiUtility::CreatePSPropertyObserverL( TCallBack( HandleCallEvent, this ), KPSUidCtsyCallInformation, KCTsyCallState ); - // Update state flags. - CAiUiIdleIntegrationImpl::HandleSystemStateChange( this ); - CAiUiIdleIntegrationImpl::HandleUiStartupStateChange( this ); + ActivateUI(); + + __TIME_ENDMARK( "CAiUiIdleIntegrationImpl::ConstructL, done", time ); } // ---------------------------------------------------------------------------- @@ -142,24 +129,12 @@ // ---------------------------------------------------------------------------- // void CAiUiIdleIntegrationImpl::ActivateUI() - { - if( iUiStartupPhaseOk && iSystemStateOk ) - { - RWsSession& wsSession( iEikEnv.WsSession() ); - - TInt focusWgId( wsSession.GetFocusWindowGroup() ); - - if( iThisApplicationWgId != focusWgId ) - { - TApaTaskList taskList( wsSession ); - - TApaTask task( taskList.FindApp( TUid::Uid( AI_UID3_AIFW_EXE ) ) ); - - task.SendSystemEvent( EApaSystemEventBroughtToForeground ); - } - - iAiFwEventHandler->HandleActivateUI(); - } + { + __TICK( "CAiUiIdleIntegrationImpl::ActivateUI - HandleActivateUI" ); + + iAiFwEventHandler->HandleActivateUI(); + + __PRINTS( "CAiUiIdleIntegrationImpl::ActivateUI - HandleActivateUI done" ); } // ---------------------------------------------------------------------------- @@ -169,64 +144,48 @@ void CAiUiIdleIntegrationImpl::HandleWsEventL( const TWsEvent& aEvent, CCoeControl* /*aDestination*/ ) { - if( !iSystemStateOk || !iUiStartupPhaseOk ) - { - return; + TInt type( aEvent.Type() ); + + if ( type == KAknFullOrPartialForegroundGained ) + { + if ( !iForeground ) + { + iForeground = ETrue; + iActiveIdleState->SetIsIdleForeground( ETrue ); + SetCallBubbleIfNeededL(); + } } - - switch ( aEvent.Type() ) - { - case KAknFullOrPartialForegroundGained: - { - if ( !iThisApplicationForeground ) - { - iThisApplicationForeground = ETrue; - iActiveIdleState->SetIsIdleForeground( ETrue ); - SetCallBubbleIfNeededL(); - } - break; - } - - case KAknFullOrPartialForegroundLost: - { - if ( iThisApplicationForeground ) - { - iThisApplicationForeground = EFalse; - iActiveIdleState->SetIsIdleForeground( EFalse ); - ClearCallBubbleL(); + else if ( type == KAknFullOrPartialForegroundLost ) + { + if ( iForeground ) + { + iForeground = EFalse; + iActiveIdleState->SetIsIdleForeground( EFalse ); + ClearCallBubbleL(); + } + } + else if ( type == EEventKeyDown ) + { + if( aEvent.Key()->iScanCode == EStdKeyDevice0 ) + { + TBool isDialog( iEikEnv.AppUi()->IsDisplayingMenuOrDialog() ); + + if( isDialog || iAiFwEventHandler->QueryIsMenuOpen() ) + { + RProperty::Set( + KPSUidAiInformation, + KActiveIdlePopupState, + EPSAiDisplayingMenuOrDialog ); } - break; - } - - case EEventKeyDown: - { - if( aEvent.Key()->iScanCode == EStdKeyDevice0 ) - { - TBool isDialog( iEikEnv.AppUi()->IsDisplayingMenuOrDialog() ); - - if( isDialog || iAiFwEventHandler->QueryIsMenuOpen() ) - { - RProperty::Set( - KPSUidAiInformation, - KActiveIdlePopupState, - EPSAiDisplayingMenuOrDialog ); - } - else - { - RProperty::Set( - KPSUidAiInformation, - KActiveIdlePopupState, - EPSAiNotDisplayingMenuOrDialog ); - } - } - break; - } - - default: - { - break; - } - } + else + { + RProperty::Set( + KPSUidAiInformation, + KActiveIdlePopupState, + EPSAiNotDisplayingMenuOrDialog ); + } + } + } } // ---------------------------------------------------------------------------- @@ -278,66 +237,6 @@ } // ---------------------------------------------------------------------------- -// CAiUiIdleIntegrationImpl::HandleSystemStateChange() -// ---------------------------------------------------------------------------- -// -TInt CAiUiIdleIntegrationImpl::HandleSystemStateChange( TAny* aPtr ) - { - __ASSERT_DEBUG( aPtr, - AiFwPanic::Panic( AiFwPanic::EAiFwPanic_NullPointerReference ) ); - - CAiUiIdleIntegrationImpl* self = - static_cast( aPtr ); - - if( !self->iSystemStateOk ) - { - TInt state( 0 ); - - self->iSystemStateObserver->Get( state ); - - if ( state == ESwStateCriticalPhaseOK || - state == ESwStateNormalRfOn || - state == ESwStateNormalRfOff || - state == ESwStateNormalBTSap ) - { - self->iSystemStateOk = ETrue; - self->ActivateUI(); - } - } - - return KErrNone; - } - -// ---------------------------------------------------------------------------- -// CAiUiIdleIntegrationImpl::HandleUiStartupStateChange() -// ---------------------------------------------------------------------------- -// -TInt CAiUiIdleIntegrationImpl::HandleUiStartupStateChange( TAny *aPtr ) - { - __ASSERT_DEBUG( aPtr, - AiFwPanic::Panic( AiFwPanic::EAiFwPanic_NullPointerReference ) ); - - CAiUiIdleIntegrationImpl* self = - static_cast( aPtr ); - - if( !self->iUiStartupPhaseOk ) - { - TInt state( 0 ); - - self->iUiStartupStateObserver->Get( state ); - - if( state == EStartupUiPhaseAllDone ) - { - self->iUiStartupPhaseOk = ETrue; - - self->ActivateUI(); - } - } - - return KErrNone; - } - -// ---------------------------------------------------------------------------- // CAiUiIdleIntegrationImpl::HandleCallEvent() // ---------------------------------------------------------------------------- // @@ -359,7 +258,7 @@ TBool allowed = EFalse; if( !self->iIncallBubbleAllowed && - self->iThisApplicationForeground && + self->iForeground && ( callStatus > EPSCTsyCallStateNone ) ) { allowed = ETrue; diff -r d0529222e3f0 -r bd874ee5e5e2 idlefw/src/idleint/aiuiidleintegrationimpl.h --- a/idlefw/src/idleint/aiuiidleintegrationimpl.h Fri Feb 19 23:07:29 2010 +0200 +++ b/idlefw/src/idleint/aiuiidleintegrationimpl.h Fri Mar 12 15:43:54 2010 +0200 @@ -19,9 +19,13 @@ #ifndef C_AIUIIDLEINTEGRATIONIMPL_H #define C_AIUIIDLEINTEGRATIONIMPL_H +// System includes +#include + +// User includes #include "aiuiidleintegration.h" -#include +// Forward declarations class CActiveIdleState; class CAknIncallBubble; class MAiPSPropertyObserver; @@ -32,7 +36,8 @@ */ NONSHARABLE_CLASS( CAiUiIdleIntegrationImpl ) : public CAiUiIdleIntegration { -public: // constructor and destructor +public: + // constructor and destructor static CAiUiIdleIntegrationImpl* NewL( CEikonEnv& aEikEnv, const TAiIdleKeySoundConfig& aKeySoundConfig, @@ -40,49 +45,49 @@ ~CAiUiIdleIntegrationImpl(); -public: // new functions +public: + // new functions void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination ); -private: // constructors +private: + // constructors CAiUiIdleIntegrationImpl(CEikonEnv& aEikEnv, MAiFwEventHandler* aAiFwEventHandler); void ConstructL(const TAiIdleKeySoundConfig& aKeySoundConfig); -private: // new functions +private: + // new functions void ActivateUI(); void SetCallBubbleIfNeededL(); void ClearCallBubbleL(); - static TInt HandleSystemStateChange( TAny *aPtr ); - static TInt HandleUiStartupStateChange( TAny *aPtr ); static TInt HandleCallEvent( TAny *aPtr ); -private: // data - - CEikonEnv& iEikEnv; - CActiveIdleState* iActiveIdleState; - TBool iThisApplicationForeground; - TBool iIncallBubbleAllowed; - TInt iThisApplicationWgId; - TInt iEikonServerWgId; - CAknIncallBubble* iIncallBubble; +private: + // data /** - * Observer for system state Publish&Subscribe key. - * Owned. + * EikonEnv + * Not owned */ - MAiPSPropertyObserver* iSystemStateObserver; - + CEikonEnv& iEikEnv; + /** - * Observer for system state Publish&Subscribe key. - * Owned. + * Active idle state + * Owned */ - MAiPSPropertyObserver* iUiStartupStateObserver; + CActiveIdleState* iActiveIdleState; + + /** + * Incall bubble + * Owned + */ + CAknIncallBubble* iIncallBubble; /** * Observer telephony state @@ -95,10 +100,10 @@ */ MAiFwEventHandler* iAiFwEventHandler; - TBool iSystemStateOk; - TBool iUiStartupPhaseOk; + TBool iForeground; + TBool iIncallBubbleAllowed; }; - #endif // C_AIUIIDLEINTEGRATION_H +// End of file diff -r d0529222e3f0 -r bd874ee5e5e2 layers.sysdef.xml --- a/layers.sysdef.xml Fri Feb 19 23:07:29 2010 +0200 +++ b/layers.sysdef.xml Fri Mar 12 15:43:54 2010 +0200 @@ -23,6 +23,13 @@ + + + + + + + diff -r d0529222e3f0 -r bd874ee5e5e2 menucontentsrv/conf/s60mcs.confml Binary file menucontentsrv/conf/s60mcs.confml has changed diff -r d0529222e3f0 -r bd874ee5e5e2 menucontentsrv/group/mcsmenuhandler.mmp --- a/menucontentsrv/group/mcsmenuhandler.mmp Fri Feb 19 23:07:29 2010 +0200 +++ b/menucontentsrv/group/mcsmenuhandler.mmp Fri Mar 12 15:43:54 2010 +0200 @@ -32,6 +32,7 @@ SOURCE menuurlhandler.cpp SOURCE menuuninstalloperation.cpp SOURCE menulinkhandler.cpp +SOURCE menutasklist.cpp USERINCLUDE ../inc USERINCLUDE ../handlerinc diff -r d0529222e3f0 -r bd874ee5e5e2 menucontentsrv/group/mcsmenusrv.mmp --- a/menucontentsrv/group/mcsmenusrv.mmp Fri Feb 19 23:07:29 2010 +0200 +++ b/menucontentsrv/group/mcsmenusrv.mmp Fri Mar 12 15:43:54 2010 +0200 @@ -12,7 +12,7 @@ * Contributors: * * Description: -* Version : %version: sa1spcx1#5.1.7 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: ou1s60ui#5.1.8 % << Don't touch! Updated by Synergy at check-out. * */ @@ -22,8 +22,6 @@ #include #include "../inc/menuuid.hrh" -EPOCHEAPSIZE 4000 3000000 - TARGET mcsmenuserver.exe TARGETTYPE exe UID 0x1000008c MENU_SRV_UID3 @@ -44,6 +42,6 @@ LIBRARY euser.lib LIBRARY mcsmenu.lib LIBRARY mcsmenuutils.lib +LIBRARY MemMan.lib - diff -r d0529222e3f0 -r bd874ee5e5e2 menucontentsrv/handlerinc/menutasklist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menucontentsrv/handlerinc/menutasklist.h Fri Mar 12 15:43:54 2010 +0200 @@ -0,0 +1,91 @@ +/* +* Copyright (c) 2005 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 MENUTASKLIST_H +#define MENUTASKLIST_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. +* @since Series 60 3.0 +*/ +class CMenuTaskList : 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 CMenuTaskList + */ + static CMenuTaskList* 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 CMenuTaskList, which is on the cleanup stack + */ + static CMenuTaskList* NewLC(RWsSession& aWsSession); + /** + * Destructor. + */ + ~CMenuTaskList(); + + /** + * 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: + CMenuTaskList(RWsSession& aWsSession); + void ConstructL(); + +private: + RWsSession& iWs; + RArray iWgs; + }; + +#endif diff -r d0529222e3f0 -r bd874ee5e5e2 menucontentsrv/handlersrc/menuapphandler.cpp --- a/menucontentsrv/handlersrc/menuapphandler.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/menucontentsrv/handlersrc/menuapphandler.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -18,6 +18,7 @@ #include "mcsmenuitem.h" #include "menucompletedoperation.h" #include "menuuninstalloperation.h" +#include "menutasklist.h" #include #include @@ -26,7 +27,6 @@ #include #include #include -#include // ================= MEMBER FUNCTIONS ======================= @@ -158,9 +158,8 @@ User::LeaveIfError( wsSession.Connect() ); CleanupClosePushL( wsSession ); - TApaTaskList* taskList = new (ELeave) TApaTaskList( wsSession ); - TApaTask task = taskList->FindApp( aUid ); - + CMenuTaskList* taskList = CMenuTaskList::NewL( wsSession ); + TApaTask task = taskList->FindRootApp( aUid ); delete taskList; if ( task.Exists() ) diff -r d0529222e3f0 -r bd874ee5e5e2 menucontentsrv/handlersrc/menutasklist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/menucontentsrv/handlersrc/menutasklist.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -0,0 +1,91 @@ +/* +* 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 "menutasklist.h" + +CMenuTaskList* CMenuTaskList::NewL(RWsSession& aWsSession) + { + CMenuTaskList* self = NewLC(aWsSession); + CleanupStack::Pop(self); + return self; + } + +CMenuTaskList* CMenuTaskList::NewLC(RWsSession& aWsSession) + { + CMenuTaskList* self = new(ELeave) CMenuTaskList(aWsSession); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CMenuTaskList::CMenuTaskList(RWsSession& aWsSession) +: iWs(aWsSession) + { + } + +void CMenuTaskList::ConstructL() + { + UpdateListL(); + } + +CMenuTaskList::~CMenuTaskList() + { + iWgs.Close(); + } + +void CMenuTaskList::UpdateListL() + { + User::LeaveIfError(iWs.WindowGroupList(&iWgs)); + } + + +TApaTask CMenuTaskList::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 CMenuTaskList::IsRootWindowGroup(TInt aWgId) const + { + TInt count = iWgs.Count(); + for (TInt ii=0; ii #include "menusrv.h" // ==================== LOCAL FUNCTIONS ==================== @@ -27,6 +27,10 @@ */ GLDEF_C TInt E32Main() { + RAllocator* iAllocator = MemoryManager::SwitchToFastAllocator(); + TInt err = RunMenuServer(); + + MemoryManager::CloseFastAllocator(iAllocator); return err; } diff -r d0529222e3f0 -r bd874ee5e5e2 xcfw/src/xcfwlocalizer.cpp --- a/xcfw/src/xcfwlocalizer.cpp Fri Feb 19 23:07:29 2010 +0200 +++ b/xcfw/src/xcfwlocalizer.cpp Fri Mar 12 15:43:54 2010 +0200 @@ -159,9 +159,8 @@ do { lcstring.Num( (TInt64)langs[current] ); codelen = lcstring.Length()>1?lcstring.Length():KMinLangCodeLen; - locfile->Des().Copy( PathInfo::RomRootPath().Left( KPathStartLoc ) ); - locfile->Des().Append( filepath ); - locfile->Des().Format( locfile->Des(), codelen, langs[current] ); + locfile->Des().Format( filepath, codelen, langs[current] ); + locfile->Des().Insert( 0, PathInfo::RomRootPath().Left( KPathStartLoc ) ); current--; } while ( current >= 0 && !BaflUtils::FileExists( aFileSystem, locfile->Des() ) );