diff -r 84a16765cd86 -r 98b66e4fb0be installationservices/swcomponentregistry/source/server/scrsubsession.cpp --- a/installationservices/swcomponentregistry/source/server/scrsubsession.cpp Fri Mar 19 09:33:35 2010 +0200 +++ b/installationservices/swcomponentregistry/source/server/scrsubsession.cpp Fri Apr 16 15:05:20 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of the License "Eclipse Public License v1.0" @@ -240,3 +240,401 @@ } return ETrue; } + +////////////////////////////// +///CCompViewSubsessionContext +///////////////////////////// + +CAppInfoViewSubsessionContext::~CAppInfoViewSubsessionContext() + { + iApps.Close(); + } + +///////////////////////// +///CAppInfoViewSubsession +//////////////////////// + +CAppInfoViewSubsession* CAppInfoViewSubsession::NewL(CScrSession& aSession) + { + CAppInfoViewSubsession* self = new(ELeave) CAppInfoViewSubsession(aSession); + CleanupClosePushL(*self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +CAppInfoViewSubsession::CAppInfoViewSubsession(CScrSession &aSession) : CScrSubsession(aSession) + { + } + +void CAppInfoViewSubsession::ConstructL() +/** + Second-phase constructor. + */ + { + iSubsessionContext = new (ELeave) CAppInfoViewSubsessionContext; + CScrSubsession::ConstructL(); + } + +CAppInfoViewSubsession::~CAppInfoViewSubsession() +/** + Destructor for the subsession object. + */ + { + delete iAppInfoFilter; + if(NULL != iApaAppInfo) + delete iApaAppInfo; + delete iSubsessionContext; + } + +TBool CAppInfoViewSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage) +/** + Implement CFileListSubsession by handling the supplied message. + + @param aFunction Function identifier without SCS code. + @param aMessage Standard server-side handle to message. + @return ETrue means complete client request now. EFalse for asynchronous tasks. + */ + { + TScrSessionFunction f = static_cast(aFunction); + + switch (f) + { + case EOpenAppInfoView: + { + DeleteObjectZ(iAppInfoFilter); + iAppInfoFilter = iServer->RequestImpL()->ReadAppInfoFilterL(aMessage); + DeleteObjectZ(iStatement); + iSubsessionContext->iLocale = TLanguage(aMessage.Int1()); + + if(iSubsessionContext->iLocale == KUnspecifiedLocale) + { + iSubsessionContext->iLocale = User::Language(); + } + iSubsessionContext->iAppInfoIndex = 0; + iServer->RequestImpL()->OpenAppInfoViewL(*iAppInfoFilter, this->iSubsessionContext); + break; + } + case EGetNextAppInfoSize: + iServer->RequestImpL()->NextAppInfoSizeL(aMessage, iApaAppInfo, this->iSubsessionContext); + break; + case EGetNextAppInfoData: + iServer->RequestImpL()->NextAppInfoDataL(aMessage, iApaAppInfo); + break; + + default: + User::Leave(KErrNotSupported); + break; + } + return ETrue; + } + +/////////////////////////////////////////// +///CApplicationRegInfoSubsessionContext +////////////////////////////////////////// +CApplicationRegInfoSubsessionContext::~CApplicationRegInfoSubsessionContext() + { + delete iAppServiceInfoFilter; + iServiceInfoArray.ResetAndDestroy(); + } + +///////////////////////////////// +///CApplicationRegInfoSubsession +//////////////////////////////// +CApplicationRegInfoSubsession* CApplicationRegInfoSubsession::NewL(CScrSession &aSession) +/** + Factory function allocates a new instance of CAppInfoQuerySubsession. + + Note that CAppInfoQuerySubsession derives from CObject and therefore it MUST NOT be deleted directly, + instead it should be closed. + + @return The newly created instance of CAppInfoQuerySubsession. + Ownership is transferred to the caller. + */ + { + CApplicationRegInfoSubsession* self = new(ELeave) CApplicationRegInfoSubsession(aSession); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CApplicationRegInfoSubsession::CApplicationRegInfoSubsession(CScrSession &aSession) +/** + This constructor is private and prevents direct instantiation. It provides + a single point of definition from which to call the superclass c'tor. + */ + : CScrSubsession(aSession) + { + // empty. + } + +void CApplicationRegInfoSubsession::ConstructL() +/** + Second-phase constructor. + */ + { + iSubsessionContext = new (ELeave) CApplicationRegInfoSubsessionContext; + CScrSubsession::ConstructL(); + } + +CApplicationRegInfoSubsession::~CApplicationRegInfoSubsession() +/** + Destructor for the subsession object. + */ + { + delete iSubsessionContext; + } + +TBool CApplicationRegInfoSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage) +/** + Implement CAppInfoQuerySubsession by handling the supplied message. + + @param aFunction Function identifier without SCS code. + @param aMessage Standard server-side handle to message. + @return ETrue means complete client request now. EFalse for asynchronous tasks. + */ + { + TScrSessionFunction f = static_cast(aFunction); + + switch (f) + { + case EGetAppForDataTypeAndService: + iServer->RequestImpL()->GetAppForDataTypeAndServiceL(aMessage); + break; + case EGetAppForDataType: + iServer->RequestImpL()->GetAppForDataTypeL(aMessage); + break; + case EGetAppServiceInfoSize: + iServer->RequestImpL()->GetAppServiceInfoSizeL(aMessage, this->iSubsessionContext); + break; + case EGetAppServiceInfoData: + iServer->RequestImpL()->GetAppServiceInfoDataL(aMessage, this->iSubsessionContext); + break; + case EGetApplicationInfo: + iServer->RequestImpL()->GetApplicationInfoL(aMessage); + break; + default: + User::Leave(KErrNotSupported); + break; + } + return ETrue; + } + +/////////////////////////////////////////// +///CRegInfoForApplicationSubsessionContext +////////////////////////////////////////// +CRegInfoForApplicationSubsessionContext::~CRegInfoForApplicationSubsessionContext() + { + iViewInfoArray.ResetAndDestroy(); + iServiceUidList.Close(); + iAppOwnedFiles.ResetAndDestroy(); + } + +///////////////////////////////////// +///CRegInfoForApplicationSubsession +//////////////////////////////////// +CRegInfoForApplicationSubsession* CRegInfoForApplicationSubsession::NewL(CScrSession &aSession) +/** + Factory function allocates a new instance of CAppInfoQueryContextSubsession. + + Note that CAppInfoQueryContextSubsession derives from CObject and therefore it MUST NOT be deleted directly, + instead it should be closed. + + @return The newly created instance of CAppInfoQueryContextSubsession. + Ownership is transferred to the caller. + */ + { + CRegInfoForApplicationSubsession* self = new(ELeave) CRegInfoForApplicationSubsession(aSession); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CRegInfoForApplicationSubsession::CRegInfoForApplicationSubsession(CScrSession &aSession) +/** + This constructor is private and prevents direct instantiation. It provides + a single point of definition from which to call the superclass c'tor. + */ + : CScrSubsession(aSession) + { + // empty. + } + +void CRegInfoForApplicationSubsession::ConstructL() +/** + Second-phase constructor. + */ + { + iSubsessionContext = new (ELeave) CRegInfoForApplicationSubsessionContext; + CScrSubsession::ConstructL(); + } + +CRegInfoForApplicationSubsession::~CRegInfoForApplicationSubsession() +/** + Destructor for the subsession object. + */ + { + delete iSubsessionContext; + } + +TBool CRegInfoForApplicationSubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage) +/** + Implement CAppInfoQueryContextSubsession by handling the supplied message. + + @param aFunction Function identifier without SCS code. + @param aMessage Standard server-side handle to message. + @return ETrue means complete client request now. EFalse for asynchronous tasks. + */ + { + TScrSessionFunction f = static_cast(aFunction); + + switch (f) + { + case ESetAppUid: + { + TUid appUid = TUid::Uid(aMessage.Int0()); + if(!(iServer->RequestImpL()->CheckIfAppUidExistsL(appUid))) + { + User::Leave(KErrNotFound); + } + iAppUid = appUid; + iServer->RequestImpL()->SetLocaleForRegInfoForApplicationSubsessionContextL(aMessage, this->iSubsessionContext); + break; + } + case EGetServiceUidSize: + iServer->RequestImpL()->GetServiceUidSizeL(aMessage,iAppUid, this->iSubsessionContext); + break; + case EGetServiceUidList: + iServer->RequestImpL()->GetServiceUidDataL(aMessage, this->iSubsessionContext); + break; + case EGetApplicationLanguage: + iServer->RequestImpL()->GetApplicationLanguageL(aMessage,this->iSubsessionContext); + break; + case EGetDefaultScreenNumber: + iServer->RequestImpL()->GetDefaultScreenNumberL(aMessage,iAppUid); + break; + case EGetNumberOfOwnDefinedIcons: + iServer->RequestImpL()->GetNumberOfOwnDefinedIconsL(aMessage,iAppUid,this->iSubsessionContext); + break; + case EGetViewSize: + iServer->RequestImpL()->GetViewSizeL(aMessage, iAppUid, this->iSubsessionContext); + break; + case EGetViewData: + iServer->RequestImpL()->GetViewDataL(aMessage, this->iSubsessionContext); + break; + case EGetAppOwnedFilesSize: + iServer->RequestImpL()->GetAppOwnedFilesSizeL(aMessage, iAppUid, this->iSubsessionContext); + break; + case EGetAppOwnedFilesData: + iServer->RequestImpL()->GetAppOwnedFilesDataL(aMessage, this->iSubsessionContext); + break; + case EGetAppCharacteristics: + iServer->RequestImpL()->GetAppCharacteristicsL(aMessage, iAppUid); + break; + case EGetAppIconForFileName: + iServer->RequestImpL()->GetAppIconForFileNameL(aMessage, iAppUid, this->iSubsessionContext); + break; + case EGetAppViewIconFileName: + iServer->RequestImpL()->GetAppViewIconFileNameL(aMessage, iAppUid, this->iSubsessionContext); + break; + default: + User::Leave(KErrNotSupported); + break; + } + return ETrue; + } + + +//////////////////////////////////////////// +///CAppRegistrySubsessionContext +/////////////////////////////////////////// + +CAppRegistrySubsessionContext::~CAppRegistrySubsessionContext() + { + iAppUids.Close(); + } + +//////////////////////////// +///CAppRegistrySubsession +//////////////////////////// + +CAppRegistrySubsession* CAppRegistrySubsession::NewL(CScrSession& aSession) + { + CAppRegistrySubsession* self = new(ELeave) CAppRegistrySubsession(aSession); + CleanupClosePushL(*self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +CAppRegistrySubsession::CAppRegistrySubsession(CScrSession &aSession) +/** + This constructor is private and prevents direct instantiation. It provides + a single point of definition from which to call the superclass c'tor. + */ + : CScrSubsession(aSession) + { + } + +void CAppRegistrySubsession::ConstructL() +/** + Second-phase constructor. + */ + { + iSubsessionContext = new (ELeave) CAppRegistrySubsessionContext; + CScrSubsession::ConstructL(); + } + +CAppRegistrySubsession::~CAppRegistrySubsession() +/** + Destructor for the subsession object. + */ + { + if(NULL != iApplicationRegistrationInfo) + delete iApplicationRegistrationInfo; + delete iSubsessionContext; + } + +TBool CAppRegistrySubsession::DoServiceL(TInt aFunction, const RMessage2& aMessage) +/** + Implement CFileListSubsession by handling the supplied message. + + @param aFunction Function identifier without SCS code. + @param aMessage Standard server-side handle to message. + @return ETrue means complete client request now. EFalse for asynchronous tasks. + */ + { + TScrSessionFunction f = static_cast(aFunction); + + switch (f) + { + case EOpenApplicationRegistrationInfoView: + { + iSubsessionContext->iAppRegIndex = 0; + iSubsessionContext->iAppUids.Reset(); + iServer->RequestImpL()->OpenApplicationRegistrationViewL(aMessage,this->iSubsessionContext); + break; + } + case EGetApplicationRegistrationSize: + iServer->RequestImpL()->NextApplicationRegistrationInfoSizeL(aMessage, iApplicationRegistrationInfo, this->iSubsessionContext); + break; + case EGetApplicationRegistrationData: + iServer->RequestImpL()->NextApplicationRegistrationInfoDataL(aMessage, iApplicationRegistrationInfo); + break; + case EOpenApplicationRegistrationInfoForAppUidsView: + { + iSubsessionContext->iAppRegIndex = 0; + iSubsessionContext->iAppUids.Reset(); + iServer->RequestImpL()->OpenApplicationRegistrationForAppUidsViewL(aMessage,this->iSubsessionContext); + break; + } + default: + User::Leave(KErrNotSupported); + break; + } + return ETrue; + }