diff -r 09b1ac925e3f -r 03674e5abf46 securitydialogs/lockapp/src/lockappsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/lockapp/src/lockappsession.cpp Wed Sep 01 12:19:59 2010 +0100 @@ -0,0 +1,236 @@ +/* +* Copyright (c) 2007 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: LockApp server session requested by lockclient + * +*/ + + +#include "lockapptrace.h" +#include "lockappsession.h" +#include "lockappappui.h" +#include "lockappstatecontrolinterface.h" +#include "lockapputils.h" +#include + +// --------------------------------------------------------------------------- +// Default Constructor. +// --------------------------------------------------------------------------- +CLockAppSession::CLockAppSession( ) + { + + // no implementation required + } + +// --------------------------------------------------------------------------- +// Default Destructor. +// --------------------------------------------------------------------------- +CLockAppSession::~CLockAppSession( ) + { + // no implementation required + } + +// --------------------------------------------------------------------------- +// From @c CApaAppServiceBase. Handles possible error in the lock app session +// Method is empty. +// --------------------------------------------------------------------------- +void CLockAppSession::ServiceError( const RMessage2& aMessage, TInt aError ) + { + + if ( aError == KErrNotReady ) + { + // initialization not yet ready + aMessage.Complete( KErrNotReady ); + ERROR( aError, "LockApp initialization not yet ready, KErrNotReady" ); + } + else + { + ERROR_1( aError, "Service request has caused a leave, message: %d", aMessage.Function()); + CApaAppServiceBase::ServiceError( aMessage, aError ); +#ifdef _DEBUG + if ( aMessage.Function( )== ELockAppTestDestruct ) + { + User::Leave( KErrGeneral ); + } +#endif + } + } + +// --------------------------------------------------------------------------- +// From @c CApaAppServiceBase. Handles a client request. Leaving is handled by +// CLockAppSession::ServiceError() which reports the error code to the client +// --------------------------------------------------------------------------- +void CLockAppSession::ServiceL(const RMessage2& aMessage ) + { + RThread clientThread; + TInt err=aMessage.Client(clientThread); + // RDebug::Print( _L("called by %S"), &(clientThread.FullName()) ); + // RDebug::Print( clientThread.FullName() ); + + TInt response = KErrNone; + // log the message + // whole provided server API is implemented here + + switch ( aMessage.Function( ) ) + { + case ELockAppEnableKeyguard: + // enable with or without note (depends on first parameter) + response = DoEnableKeyguardL( aMessage.Int0() ); + break; + case ELockAppDisableKeyguard: + // disable with or without note (depends on first parameter) + response = DoDisableKeyguardL( aMessage.Int0() ); + break; + case ELockAppEnableDevicelock: + // check that client has needed capabilities to enable devicelock + if ( aMessage.HasCapability( ECapabilityWriteDeviceData ) ) + { + // first parameter contains the reason + response = DoEnableDevicelockL( (TDevicelockReason) aMessage.Int0() ); + } + else + { + response = KErrPermissionDenied; + } + break; + case ELockAppDisableDevicelock: + // check that client has needed capabilities to disable devicelock + if ( aMessage.HasCapability( ECapabilityWriteDeviceData ) ) + { + response = DoDisableDevicelockL( ); + } + else + { + response = KErrPermissionDenied; + } + break; + case ELockAppOfferKeyguard: + // offer to lock keyguard + response = DoOfferKeyguardL( ); + break; + case ELockAppOfferDevicelock: + // TODO implement this someday if needed + response = KErrNotSupported; + break; + case ELockAppShowKeysLockedNote: + response = DoShowKeysLockedNoteL( ); + break; +#ifdef _DEBUG + case ELockAppTestDestruct: + // test for leave + User::Leave( KErrGeneral ); + break; + case ELockAppTestInternal: + // test internal functions (which cannot be tested trough client API) + response = StateControlL()->ExecuteInternalTest( ); + break; +#endif + default: + // illegal message call, panic the client process + PanicClient( aMessage, ELockPanicIllegalMessage ); + return; + } + + INFO_2( "CLockAppSession received service message: %d. Result: %d", aMessage.Function(), response ); + aMessage.Complete( response ); + } + +// --------------------------------------------------------------------------- +// Request lockapp to enable keyguard on device (might not be approved, e.g. +// devicelock activated). +// --------------------------------------------------------------------------- +TInt CLockAppSession::DoEnableKeyguardL( TBool aShowNote ) + { + // calls the main control + + return StateControlL()->EnableKeyguardL( aShowNote ); + } + +// --------------------------------------------------------------------------- +// Request lockapp to disable keyguard on device (might not be approved, e.g. +// already disabled). +// --------------------------------------------------------------------------- +TInt CLockAppSession::DoDisableKeyguardL( TBool aShowNote ) + { + // calls the main control + + return StateControlL()->DisableKeyguardL( aShowNote ); + } + +// --------------------------------------------------------------------------- +// Request lockapp to enable devicelock on device (might not be approved). +// --------------------------------------------------------------------------- +TInt CLockAppSession::DoEnableDevicelockL( TDevicelockReason aReason ) + { + // calls the main control + + return StateControlL()->EnableDevicelockL( aReason ); + } + +// --------------------------------------------------------------------------- +// Request lockapp to disable devicelock on device (might not be approved). +// --------------------------------------------------------------------------- +TInt CLockAppSession::DoDisableDevicelockL( ) + { + // TODO Investigate if this should be allowed in API or not + // calls the main control + // StateControlL()->DisableDevicelockL( ); + return KErrPermissionDenied; + } + +// --------------------------------------------------------------------------- +// Request to offer keyguard on device (might not be approved, e.g. +// already locked). +// --------------------------------------------------------------------------- +TInt CLockAppSession::DoOfferKeyguardL( ) + { + // calls the main control + return StateControlL()->OfferKeyguard( ); + } + +// --------------------------------------------------------------------------- +// Request to show keys locked note, only works if keyguard is enabled +// --------------------------------------------------------------------------- +TInt CLockAppSession::DoShowKeysLockedNoteL( ) + { + // calls the main control + + return StateControlL()->ShowKeysLockedNote( ); + } + +// --------------------------------------------------------------------------- +// Return the main state control to the server session. +// Application appui and the main state control might not be constructed yet. +// --------------------------------------------------------------------------- +MLockAppStateControl* CLockAppSession::StateControlL( ) + { + + // other parts of lockapp construction may not be finished + if ( !iStateControl ) + { + CLockAppAppUi* appUi = (CLockAppAppUi*) CEikonEnv::Static()->EikAppUi(); + if ( appUi ) + { + iStateControl = appUi->StateControl( ); + if ( !iStateControl ) + { + User::Leave( KErrNotReady ); + } + } + else + { + User::Leave( KErrNotReady ); + } + } + return iStateControl; + }