diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatereferenceplugins/test/tunitcustcmd/src/testpinnotifierplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatereferenceplugins/test/tunitcustcmd/src/testpinnotifierplugin.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,188 @@ +// Copyright (c) 2007-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: +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include "testpinnotifierplugin.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +const TUint KCustomcmdServerPropertyKey = 0x0012AC; +const TUid KCustomcmdServerSID={0x2000D75B}; // tcustomcmd_server SID = KSsmServerName SID (changed in tcustomcmd_server.mmp file) + +_LIT(KPinNotifierResFileNameAndPath,"\\resource\\apps\\testpinnotifier.rsc"); +_LIT(KPinNotifierTitle,"Security Check"); + +//Hardcoding security pin code. +_LIT(KPinCode,","); + +CArrayPtr* NotifierArrayL() + { + CArrayPtrFlat* subjects=new (ELeave)CArrayPtrFlat(10); + CleanupStack::PushL(subjects); + subjects->AppendL(CSecurityPinNotifier::NewLC()); + CleanupStack::Pop(2, subjects); + return subjects; + } + +//ECOM SUPPORT +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(0x2000E667, NotifierArrayL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy) ; + return ImplementationTable; + } + + +// Notifier methods +void CSecurityPinNotifier::Release() + { + delete this; + } + +CSecurityPinNotifier::TNotifierInfo CSecurityPinNotifier::RegisterL() + { + iInfo.iUid = CSsmUiSpecific::SecurityPinNotifierUid(); + iInfo.iChannel = CSsmUiSpecific::ScreenOutputChannelUid(); + iInfo.iPriority = ENotifierPriorityVHigh; + return iInfo; + } + +CSecurityPinNotifier::TNotifierInfo CSecurityPinNotifier::Info() const + { + return iInfo; + } + +TPtrC8 CSecurityPinNotifier::StartL(const TDesC8& /*aBuffer*/) + { + RouseSleepingDialog(); + return KNullDesC8(); + } + +void CSecurityPinNotifier::StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage) + { + // Set this swp to indicate to stop the active schaduler + const TInt KSwpCancelRequest = 99; + TInt err = RProperty::Set(KCustomcmdServerSID, KCustomcmdServerPropertyKey,KSwpCancelRequest); + + iMessage = aMessage; + iReplySlot = aReplySlot; + SetTitleL(KPinNotifierTitle()); + StartL(aBuffer); + } + +void CSecurityPinNotifier::Cancel() + { + ExitSleepingDialog(); + } + +TPtrC8 CSecurityPinNotifier::UpdateL(const TDesC8& /*aBuffer*/) + { + return KNullDesC8(); + } + +void CSecurityPinNotifier::UpdateL(const TDesC8& aBuffer, TInt /*aReplySlot*/, const RMessagePtr2& /*aMessage*/) + { + UpdateL(aBuffer); + } + +CSecurityPinNotifier* CSecurityPinNotifier::NewLC() + { + CSecurityPinNotifier* self=new (ELeave) CSecurityPinNotifier(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CSecurityPinNotifier::CSecurityPinNotifier() + { + } + +CSecurityPinNotifier::~CSecurityPinNotifier() + { + iEikonEnv->RemoveFromStack(this); + } + +void CSecurityPinNotifier::ConstructL() + { + // load the resource file + const TDriveNumber KStoreDrive = EDriveZ; + TDriveUnit driveUnit(KStoreDrive); + TDriveName drive=driveUnit.Name(); + TFileName resourceFileName; + resourceFileName.Insert(0, drive); + + resourceFileName.Append(KPinNotifierResFileNameAndPath); + CEikonEnv& eikonEnv = *CEikonEnv::Static(); + BaflUtils::NearestLanguageFile(eikonEnv.FsSession(), resourceFileName); + TInt resourceFileId = eikonEnv.AddResourceFileL(resourceFileName); + + TRAPD(err,ConstructSleepingAlertDialogL(R_SECURITY_PIN)); + iEikonEnv->DeleteResourceFile(resourceFileId); + User::LeaveIfError(err); + + } + +void CSecurityPinNotifier::PreLayoutDynInitL() + { + } + +TBool CSecurityPinNotifier::OkToExitL(TInt /*aButtonId*/) + { + TPckgBuf securityResultBuffer; + securityResultBuffer = KErrGeneral; + if (iMessage != RMessagePtr2()) + { + TBuf<5> newPINValueVerify; + + //Get pinter for the secret editor control + CEikSecretEditor* pinEditor = static_cast(Control(0)); + pinEditor->GetText(newPINValueVerify); + + //Verify the entered pin number + if(0 == newPINValueVerify.Compare(KPinCode)) + { + securityResultBuffer = KErrNone; + } + + pinEditor->Reset(); + iMessage.Write(iReplySlot,securityResultBuffer); + iMessage.Complete(KErrNone); + // Set this swp to indicate to stop the active schaduler + const TInt KSwpValForOnOkStopScheduler = 88; + TInt err = RProperty::Set(KCustomcmdServerSID, KCustomcmdServerPropertyKey, KSwpValForOnOkStopScheduler); + + if(err) + { + return EFalse; + } + } + return ETrue; + }