diff -r e8c1ea2c6496 -r 8758140453c0 localisation/apparchitecture/tef/TNonNative/TNNApp1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localisation/apparchitecture/tef/TNonNative/TNNApp1.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,582 @@ +// Copyright (c) 2005-2009 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 "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +/** + @file + @internalComponent - Internal Symbian test code +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "TNNAPP1.H" +#include + +TTstTransactionType gTransactionType=ETransactionType_null; +TBool gCallMadeToNewOverload_ProcessCommandParametersL=EFalse; +TInt gErrorWhenOpeningFile=KMinTInt; +TBuf<50> gFileNameWithoutDriveOrPath; +TBuf8<40> gBufferFromFile(KNullDesC8); + +// CTstAppService + +class CTstAppService : public CApaAppServiceBase + { +public: + static CTstAppService* NewL(); +private: + inline CTstAppService() {} + // from CApaAppServiceBase + virtual void ServiceL(const RMessage2& aMessage); + }; + +CTstAppService* CTstAppService::NewL() + { + return new(ELeave) CTstAppService; + } + +void CTstAppService::ServiceL(const RMessage2& aMessage) + { + switch (aMessage.Function()) + { + case EOpcode_receiveTestResult: + { + CActiveScheduler::Stop(); + const TBool passingFileByHandle=aMessage.Int0(); + TBuf<50> fileNameWithoutDriveOrPath; + aMessage.ReadL(1, fileNameWithoutDriveOrPath); + TBool result=(gFileNameWithoutDriveOrPath.CompareF(fileNameWithoutDriveOrPath)==0) ? KCheckPass : KCheckFail; + switch (gTransactionType) + { + case ETransactionType_filePassedByName: + if (!gCallMadeToNewOverload_ProcessCommandParametersL) + { + result=KCheckFail; + } + if (passingFileByHandle) + { + result=KCheckFail; + } + if (gErrorWhenOpeningFile!=KErrPermissionDenied) + { + result=KCheckFail; + } + if (User::CreatorSecureId().iId!=0x101F289C) // uid of the creator app => apparctestserver! + { + result=KCheckFail; + } + break; + + case ETransactionType_filePassedByHandle: + if (!gCallMadeToNewOverload_ProcessCommandParametersL) + { + result=KCheckFail; + } + if (!passingFileByHandle) + { + result=KCheckFail; + } + if (gErrorWhenOpeningFile!=KMinTInt) + { + result=KCheckFail; + } + if (User::CreatorSecureId().iId!=0x101F289C) // uid of the creator app => apparctestserver! + { + result=KCheckFail; + } + break; + + case ETransactionType_null: + default: + User::Invariant(); + break; + } + aMessage.Complete(result); + } + break; + + default: + User::Leave(KErrNotSupported); + break; + } + } + +// CTstAppServer + +class CTstAppServer : public CEikAppServer + { +public: + static CTstAppServer* NewL(); +private: + inline CTstAppServer() {} + // from CApaAppServer + virtual CApaAppServiceBase* CreateServiceL(TUid aServiceUid) const; + virtual TCustomResult CreateServiceSecurityCheckL(TUid aServiceUid, const RMessage2& aMessage, TInt& aAction, TSecurityInfo& aMissingSecurityInfo); + }; + +CTstAppServer* CTstAppServer::NewL() + { // static + CTstAppServer* const appServer=new(ELeave) CTstAppServer; + CleanupStack::PushL(appServer); + appServer->ConstructL(KLitServerName); + CleanupStack::Pop(appServer); + return appServer; + } + +CApaAppServiceBase* CTstAppServer::CreateServiceL(TUid aServiceUid) const + { + if ((aServiceUid.iUid==KTstServiceUid_nonSecure.iUid) || + (aServiceUid.iUid==KTstServiceUid_secure.iUid)) + { + return CTstAppService::NewL(); + } + User::Leave(KErrNotSupported); + return NULL; + } + +CPolicyServer::TCustomResult CTstAppServer::CreateServiceSecurityCheckL(TUid aServiceUid, const RMessage2& aMessage, TInt& aAction, TSecurityInfo& aMissingSecurityInfo) + { + if ((aServiceUid.iUid==KTstServiceUid_secure.iUid) && (aMessage.SecureId().iId!=0x101F289C)) // uid of the creator app => apparctestserver! + { + return EFail; + } + return CEikAppServer::CreateServiceSecurityCheckL(aServiceUid, aMessage, aAction, aMissingSecurityInfo); + } + +// CTstControl + +class CTstControl : public CCoeControl + { +public: + static CTstControl* NewL(); + virtual ~CTstControl(); +private: + CTstControl(); + void ConstructL(); + // from CCoeControl + virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode); + virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent); + virtual void Draw(const TRect& aRectangle) const; +private: + CTstAppServer* iAppServer; + }; + +CTstControl* CTstControl::NewL() + { // static + CTstControl* const control=new(ELeave) CTstControl; + CleanupStack::PushL(control); + control->ConstructL(); + CleanupStack::Pop(control); + return control; + } + +CTstControl::~CTstControl() + { + delete iAppServer; + iEikonEnv->RemoveFromStack(this); + } + +CTstControl::CTstControl() + { + } + +void CTstControl::ConstructL() + { + RWsSession& windowServerSession=iCoeEnv->WsSession(); + windowServerSession.SetAutoFlush(ETrue); + CreateWindowL(); + EnableDragEvents(); + ClaimPointerGrab(); + RDrawableWindow& window=*DrawableWindow(); + window.SetOrdinalPosition(0); + window.SetShadowHeight(3); + CWsScreenDevice& screenDevice=*iCoeEnv->ScreenDevice(); + const TSize screenSize(screenDevice.SizeInPixels()); + SetExtent(TPoint(20, 20), TSize(screenSize.iWidth-40, screenSize.iHeight-40)); + iEikonEnv->AddDialogLikeControlToStackL(this); + iAppServer=CTstAppServer::NewL(); + ActivateL(); + } + +TKeyResponse CTstControl::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode) + { + if (aEventCode==EEventKey) + { + switch (aKeyEvent.iCode) + { + case EKeyEscape: + iEikonEnv->EikAppUi()->HandleCommandL(EEikCmdExit); + break; + } + } + return EKeyWasConsumed; + } + +void CTstControl::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + CCoeControl::HandlePointerEventL(aPointerEvent); + } + +void CTstControl::Draw(const TRect&) const + { + CWindowGc& graphicsContext=SystemGc(); + graphicsContext.SetPenStyle(CGraphicsContext::ESolidPen); + graphicsContext.SetPenColor(KRgbRed); + graphicsContext.SetBrushStyle(CGraphicsContext::ESolidBrush); + graphicsContext.SetBrushColor(KRgbGray); + TRect rectangle(TPoint(0, 0), Rect().Size()); + graphicsContext.DrawRect(rectangle); + rectangle.Shrink(1, 1); + graphicsContext.SetPenColor(KRgbBlue); + graphicsContext.SetBrushStyle(CGraphicsContext::ENullBrush); + + const TInt KGapAboveTop=40; + const TInt KGapBetweenLines=5; + const TInt KMaxLengthOfText=100; + TBuf text; + + TInt gapLeft=5; + const CFont* font=iCoeEnv->NormalFont(); + graphicsContext.UseFont(font); + TInt heightInPixelsPlusGapBetweenLines=font->HeightInPixels()+KGapBetweenLines; + TPtrC transactionType; + switch (gTransactionType) + { + case ETransactionType_null: + transactionType.Set(_L("null")); + break; + case ETransactionType_filePassedByName: + transactionType.Set(_L("file passed by name")); + break; + case ETransactionType_filePassedByHandle: + transactionType.Set(_L("file passed by handle")); + break; + default: + User::Invariant(); + break; + } + text.Format(_L("Transaction type: %S"), &transactionType); + TInt topOfText=KGapAboveTop+font->AscentInPixels(); + graphicsContext.DrawText(text, rectangle, topOfText, CGraphicsContext::ELeft, gapLeft); + + topOfText+=heightInPixelsPlusGapBetweenLines; + _LIT(KLit_yes, "yes"); + _LIT(KLit_no, "no"); + text.Format(_L("ProcessCommandParametersL(CApaCommandLine&) called: %S"), gCallMadeToNewOverload_ProcessCommandParametersL? &KLit_yes: &KLit_no); + graphicsContext.DrawText(text, rectangle, topOfText, CGraphicsContext::ELeft, gapLeft); + + topOfText+=heightInPixelsPlusGapBetweenLines; + text.Format(_L("Error when opening file: %d"), gErrorWhenOpeningFile); + graphicsContext.DrawText(text, rectangle, topOfText, CGraphicsContext::ELeft, gapLeft); + + topOfText+=heightInPixelsPlusGapBetweenLines; + text=_L("File contents: {"); + const TInt bufferLength=gBufferFromFile.Length(); + for (TInt i=0; iDrawNow(); + return ETrue; + } + +void CTstAppUi::HandleCommandL(TInt aCommand) + { + switch (aCommand) + { + case EEikCmdExit: + Exit(); + break; + default: + User::Invariant(); + } + } + +void CTstAppUi::OpenFileL(const TDesC&) + { + User::Invariant(); + } + +void CTstAppUi::CreateFileL(const TDesC&) + { + User::Invariant(); + } + +// CTstDocument + +class CTstDocument : public CEikDocument + { +public: + static CTstDocument* NewL(CEikApplication& aApplication); + inline CTstAppUi* TstAppUi() {return STATIC_CAST(CTstAppUi*, iAppUi);} +private: + inline CTstDocument(CEikApplication& aApplication) :CEikDocument(aApplication) {} + // from CApaDocument + virtual CFileStore* CreateFileStoreLC(RFs&, const TDesC&); + virtual void EditL(MApaEmbeddedDocObserver*, TBool); + virtual void PrintL(const CStreamStore&); + virtual void SaveL(); + virtual void StoreL(CStreamStore&, CStreamDictionary&) const; + // from CEikDocument + virtual CEikAppUi* CreateAppUiL(); + virtual CFileStore* OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFsSession); + virtual void OpenFileL(CFileStore*& aFileStore, RFile& aFile); + virtual void UpdateTaskNameL(CApaWindowGroupName* aWindowGroupName); + }; + +CTstDocument* CTstDocument::NewL(CEikApplication& aApplication) + { // static + return new(ELeave) CTstDocument(aApplication); + } + +CFileStore* CTstDocument::CreateFileStoreLC(RFs&, const TDesC&) + { + User::Invariant(); + return NULL; + } + +void CTstDocument::EditL(MApaEmbeddedDocObserver*, TBool) + { + User::Invariant(); + } + +void CTstDocument::PrintL(const CStreamStore&) + { + User::Invariant(); + } + +void CTstDocument::SaveL() + { + SetChanged(EFalse); + } + +void CTstDocument::StoreL(CStreamStore&, CStreamDictionary&) const + { + User::Invariant(); + } + +CEikAppUi* CTstDocument::CreateAppUiL() + { + return CTstAppUi::NewL(); + } + +CFileStore* CTstDocument::OpenFileL(TBool aDoOpen, const TDesC& aFileName, RFs& aFsSession) + { + if (!aDoOpen) + { + User::Leave(KErrNotSupported); + } + gFileNameWithoutDriveOrPath=TParsePtrC(aFileName).NameAndExt(); + RFile file; + CleanupClosePushL(file); + APPFWK_NEGATIVE_PLATSEC_START; + gErrorWhenOpeningFile=file.Open(aFsSession, aFileName, EFileShareReadersOnly|EFileStream|EFileRead); + APPFWK_NEGATIVE_PLATSEC_FINISH; + if (gErrorWhenOpeningFile==KErrNone) + { + User::LeaveIfError(file.Read(gBufferFromFile)); + } + CleanupStack::PopAndDestroy(&file); + gTransactionType=ETransactionType_filePassedByName; + TstAppUi()->Control()->DrawNow(); + return NULL; + } + +void CTstDocument::OpenFileL(CFileStore*& aFileStore, RFile& aFile) + { + User::LeaveIfError(aFile.Name(gFileNameWithoutDriveOrPath)); + User::LeaveIfError(aFile.Read(gBufferFromFile)); + gTransactionType=ETransactionType_filePassedByHandle; + TstAppUi()->Control()->DrawNow(); + aFileStore=NULL; + } + +void CTstDocument::UpdateTaskNameL(CApaWindowGroupName* aWindowGroupName) + { + CEikDocument::UpdateTaskNameL(aWindowGroupName); + } + +// CTstApplication + +class CTstApplication : public CEikApplication + { +public: + static CTstApplication* New(); +private: + inline CTstApplication() {} + // from CApaApplication + virtual TUid AppDllUid() const; + virtual CDictionaryStore* OpenIniFileLC(RFs&) const; + // from CEikApplication + virtual void GetDefaultDocumentFileName(TFileName& aDocumentName) const; + virtual TFileName BitmapStoreName() const; + virtual TFileName ResourceFileName() const; + virtual CApaDocument* CreateDocumentL(); + virtual void NewAppServerL(CApaAppServer*& aAppServer); + }; + +CTstApplication* CTstApplication::New() + { // static + return new CTstApplication; + } + +TUid CTstApplication::AppDllUid() const + { + return TUid::Uid(0x10207f92); + } + +CDictionaryStore* CTstApplication::OpenIniFileLC(RFs&) const + { + return NULL; // must not leave anything on the clean-up stack if it returns NULL + } + +void CTstApplication::GetDefaultDocumentFileName(TFileName& aDocumentName) const + { + aDocumentName.SetLength(0); + } + +TFileName CTstApplication::BitmapStoreName() const + { + return KNullDesC(); + } + +TFileName CTstApplication::ResourceFileName() const + { + return KNullDesC(); + } + +CApaDocument* CTstApplication::CreateDocumentL() // must return non-NULL + { + return CTstDocument::NewL(*this); + } + +void CTstApplication::NewAppServerL(CApaAppServer*& aAppServer) + { + // this doesn't get called by the framework as we're not launching the server via the server-differentiator in CApaCommandLine, we launching the server as a fixed-name server so we have to call this function ourselves instead + CEikApplication::NewAppServerL(aAppServer); + } + +// stand-alone functions + +LOCAL_C CApaApplication* NewApplication() + { + return CTstApplication::New(); + } + +GLDEF_C TInt E32Main() + { + return EikStart::RunApplication(NewApplication); + }