sysstatemgmt/systemstatereferenceplugins/test/tunitcustcmd/src/testpinnotifierplugin.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /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 <ssm/ssmuiproviderdll.h>
+#include <techview/eikdialg.h>
+#include <testpinnotifier.rsg>
+#include <bautils.h>
+#include <eikenv.h>
+#include <uikon.hrh>
+#include <ecom/implementationproxy.h>
+#include <techview/eikseced.h>
+#include <e32property.h>
+
+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<MEikSrvNotifierBase2>* NotifierArrayL()
+	{
+	CArrayPtrFlat<MEikSrvNotifierBase2>* subjects=new (ELeave)CArrayPtrFlat<MEikSrvNotifierBase2>(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<TInt> securityResultBuffer;
+	securityResultBuffer = KErrGeneral; 
+	if (iMessage != RMessagePtr2())
+		{
+   		TBuf<5> newPINValueVerify;
+
+   		//Get pinter for the secret editor control
+   		CEikSecretEditor* pinEditor = static_cast<CEikSecretEditor*>(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;
+	}