diff -r 000000000000 -r 164170e6151a securitydialogs/SecUi/Src/SecUiSystemLock.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/SecUi/Src/SecUiSystemLock.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,306 @@ +/* +* Copyright (c) 2002 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: System Lock interface +* +* +*/ + + +#include +#include // Property values +#include +#include "SecUiSystemLock.h" +#include +#include +#include +#include "secuisecuritysettings.h" +#include "SecUiWait.h" +#include +#include +#include +#include + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ +// LOCAL CONSTANTS AND MACROS + +const TInt KTriesToConnectServer( 2 ); +const TInt KTimeBeforeRetryingServerConnection( 50000 ); + +// ================= MEMBER FUNCTIONS ======================= +// +// ---------------------------------------------------------- +// CSystemLock::NewL() +// +// ---------------------------------------------------------- +// +EXPORT_C CSystemLock* CSystemLock::NewL() + { + CSystemLock* self = new(ELeave) CSystemLock(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } +// +// ---------------------------------------------------------- +// CSystemLock::ConstructL() +// +// ---------------------------------------------------------- +// +void CSystemLock::ConstructL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::ConstructL()")); + #endif + TInt err( KErrGeneral ); + TInt thisTry( 0 ); + + /* All server connections are tried to be made KTiesToConnectServer times because occasional + fails on connections are possible, at least on some servers */ + thisTry = 0; + + // connect to ETel server + while ( ( err = iServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + // load TSY + err = iServer.LoadPhoneModule( KMmTsyModuleName ); + if ( err != KErrAlreadyExists ) + { + // May also return KErrAlreadyExists if something else + // has already loaded the TSY module. And that is + // not an error. + User::LeaveIfError( err ); + } + + // open phones + User::LeaveIfError(iPhone.Open(iServer, KMmTsyPhoneName)); + CActiveScheduler::Add(this); + } +// ---------------------------------------------------------- +// CSystemLock::CSystemLock() +// C++ constructor +// ---------------------------------------------------------- +// +CSystemLock::CSystemLock() : CActive(0) + { + } +// +// ---------------------------------------------------------- +// CSystemLock::CSystemLock() +// Destructor +// ---------------------------------------------------------- +// +EXPORT_C CSystemLock::~CSystemLock() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ + + Cancel(); + + // close phone + if (iPhone.SubSessionHandle()) + iPhone.Close(); + //close ETel connection + if (iServer.Handle()) + { + iServer.UnloadPhoneModule(KMmTsyModuleName); + iServer.Close(); + } + } +// +// ---------------------------------------------------------- +// CSystemLock::SetLockedL() +// Activates system lock +// ---------------------------------------------------------- +// +EXPORT_C void CSystemLock::SetLockedL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL()")); + #endif + // close fast-swap window + CEikonEnv::Static()->DismissTaskList(); + +#ifdef __WINS__ + // can not verify security code in emulator ---> lock system +#ifdef RD_REMOTELOCK + iProperty.Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EManualLocked); +#else// !RD_REMOTELOCK + iProperty.Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOn); +#endif//RD_REMOTELOCK +#else //__WINS__ + + if(IsActive()) + return; + + + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + RMobilePhone::TMobilePhoneLockSetting lockChange(RMobilePhone::ELockSetDisabled); + CWait* wait = CWait::NewL(); + CleanupStack::PushL( wait ); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() GetLockInfo")); + #endif + iPhone.GetLockInfo(wait->iStatus, lockType, lockInfoPkg); + if (wait->WaitForRequestL() == KErrNone) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() KErrNone")); + #endif + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() ELockSetDisabled")); + #endif + // ask code + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() SetLockSetting")); + #endif + //iCustomPhone.CheckSecurityCode(iStatus, RMmCustomAPI::ESecurityCodePassPhrase); + lockChange = RMobilePhone::ELockSetEnabled; + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSystemLockOriginated); + iPhone.SetLockSetting(iStatus, lockType, lockChange); + SetActive(); + } + else + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() Lock System")); + #endif + // lock system +#ifdef RD_REMOTELOCK + iProperty.Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EManualLocked); +#else// !RD_REMOTELOCK + iProperty.Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOn); +#endif //RD_REMOTELOCK + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() Lock System OK")); + #endif + } + } + else + { + // ask code + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() ask code (SLS) ")); + #endif + lockChange = RMobilePhone::ELockSetEnabled; + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSystemLockOriginated); + iPhone.SetLockSetting(iStatus, lockType, lockChange); + SetActive(); + } + CleanupStack::PopAndDestroy(); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::SetLockedL() END")); + #endif // DEBUG + #endif // WINS + } +// +// ---------------------------------------------------------- +// CSystemLock::RunL() +// Handles query result +// ---------------------------------------------------------- +// +void CSystemLock::RunL() + { + #if defined(_DEBUG) + TInt status(iStatus.Int()); + RDebug::Print(_L("(SECUI)CSystemLock::RunL(): %d"), status); + #endif + //lower the flag + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsETelAPIOriginated); + if (iStatus == KErrNone) + { + TInt callState; + RProperty::Get(KPSUidCtsyCallInformation, KCTsyCallState, callState); + //If there is ann ongoing call, phone is not locked. + if (callState == EPSCTsyCallStateNone) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::RunL() KErrNone")); + #endif + // clear notifiers + AknNotifierController::HideAllNotifications(ETrue); + // query approved -> lock system + #ifdef RD_REMOTELOCK + iProperty.Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EManualLocked); + #else// !RD_REMOTELOCK + iProperty.Set(KPSUidCoreApplicationUIs, KCoreAppUIsAutolockStatus, EAutolockOn); + #endif//RD_REMOTELOCK + AknNotifierController::HideAllNotifications(EFalse); + } + } + else if((iStatus != KErrCancel) && (iStatus != KErrAbort)) + { //Code error or something like that. Show the dialog again. + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::RunL() Code Error")); + #endif + SetLockedL(); + } + else + { + //User canceled the dialog; do nothing... + } + + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::RunL() END")); + #endif + } +// +// ---------------------------------------------------------- +// CSecObsNotify::StartNotifier +// Cancels code request +// ---------------------------------------------------------- +// +void CSystemLock::DoCancel() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSystemLock::DoCancel")); + #endif + iPhone.CancelAsyncRequest(EMobilePhoneSetLockSetting); + } + +// End of file