diff -r 09b1ac925e3f -r 03674e5abf46 securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp --- a/securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp Tue Aug 31 16:04:40 2010 +0300 +++ b/securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp Wed Sep 01 12:19:59 2010 +0100 @@ -1,24 +1,26 @@ /* - * 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: Provides api for changing security settings. - * - * - */ +* 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: Provides api for changing security settings. +* +* +*/ + #include #include #include +#include #include #include #include @@ -29,42 +31,39 @@ #include // Property values #include #include -#include "SecUi.h" #include "secuisecuritysettings.h" +#include "SecUiAutoLockSettingPage.h" #include "secui.hrh" #include "secuisecurityhandler.h" #include "secuicodequerydialog.h" #include "SecUiWait.h" -#include + +#ifdef RD_REMOTELOCK #include #include #include +#include "SecUiRemoteLockSettingPage.h" +#endif // RD_REMOTELOCK #include - -#include "SecQueryUi.h" -#include - -/***************************************************** - * Series 60 Customer / TSY - * Needs customer TSY implementation - *****************************************************/ + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ // LOCAL CONSTANTS AND MACROS -const TInt KTriesToConnectServer(2); -const TInt KTimeBeforeRetryingServerConnection(50000); -const TInt PhoneIndex(0); +const TInt KTriesToConnectServer( 2 ); +const TInt KTimeBeforeRetryingServerConnection( 50000 ); +const TInt PhoneIndex( 0 ); -const TInt KMaxNumberOfPINAttempts(3); // is this valid also for PIN2 ? - -#define ESecUiTypeLock 0x00100000 -#define KErrTDevicelockPolicies 0x10207837 +const TInt KMaxNumberOfPINAttempts(3); +const TInt KLastRemainingInputAttempt(1); // ================= MEMBER FUNCTIONS ======================= // // ---------------------------------------------------------- // CSecuritySettings::NewL() // ---------------------------------------------------------- -// qtdone +// EXPORT_C CSecuritySettings* CSecuritySettings::NewL() { CSecuritySettings* self = new (ELeave) CSecuritySettings(); @@ -78,7 +77,7 @@ // CSecuritySettings::CSecuritySettings() // constructor // ---------------------------------------------------------- -// qtdone +// EXPORT_C CSecuritySettings::CSecuritySettings() { } @@ -87,93 +86,91 @@ // CSecuritySettings::ConstructL() // Symbian OS constructor. // ---------------------------------------------------------- -// qtdone +// EXPORT_C void CSecuritySettings::ConstructL() { /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ /***************************************************** - * Series 60 Customer / TSY - * Needs customer TSY implementation - *****************************************************/ + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ - RDEBUG("0", 0); - TInt err(KErrGeneral); - TInt thisTry(0); + TInt err( KErrGeneral ); + TInt thisTry( 0 ); iWait = CWait::NewL(); RTelServer::TPhoneInfo PhoneInfo; /* All server connections are tried to be made KTriesToConnectServer times because occasional - fails on connections are possible, at least on some servers */ - + fails on connections are possible, at least on some servers */ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ConstructL()")); + #endif + FeatureManager::InitializeLibL(); // connect to ETel server - while ((err = iServer.Connect()) != KErrNone && (thisTry++) <= KTriesToConnectServer) + while ( ( err = iServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) { - User::After( KTimeBeforeRetryingServerConnection); + User::After( KTimeBeforeRetryingServerConnection ); } - User::LeaveIfError(err); + User::LeaveIfError( err ); // load TSY - err = iServer.LoadPhoneModule(KMmTsyModuleName); - if (err != KErrAlreadyExists) + err = iServer.LoadPhoneModule( KMmTsyModuleName ); + if ( err != KErrAlreadyExists ) { // May return also KErrAlreadyExists if something else // has already loaded the TSY module. And that is // not an error. - User::LeaveIfError(err); + User::LeaveIfError( err ); } // open phones User::LeaveIfError(iServer.SetExtendedErrorGranularity(RTelServer::EErrorExtended)); User::LeaveIfError(iServer.GetPhoneInfo(PhoneIndex, PhoneInfo)); - User::LeaveIfError(iPhone.Open(iServer, PhoneInfo.iName)); + User::LeaveIfError(iPhone.Open(iServer,PhoneInfo.iName)); User::LeaveIfError(iCustomPhone.Open(iPhone)); - iSecurityHandler = new (ELeave) CSecurityHandler(iPhone); - _LIT(KFileName, "secui_"); - _LIT(KPath, "z:/resource/qt/translations/"); - RDEBUG("HbTextResolverSymbian", 0); - TBool result = HbTextResolverSymbian::Init(KFileName, KPath); - RDEBUG("result", result); - + iSecurityHandler = new( ELeave ) CSecurityHandler( iPhone ); } // // ---------------------------------------------------------- // CSecuritySettings::~CSecuritySettings() // Destructor // ---------------------------------------------------------- -// qtdone +// EXPORT_C CSecuritySettings::~CSecuritySettings() { /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ /***************************************************** - * Series 60 Customer / TSY - * Needs customer TSY implementation - *****************************************************/ + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ delete iSecurityHandler; // Cancel active requests - if (iWait->IsActive()) - { - RDEBUG("CancelAsyncRequest", 0); + if(iWait->IsActive()) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::~CSecuritySettings() CANCEL REQ")); + #endif iPhone.CancelAsyncRequest(iWait->GetRequestType()); - - switch (iWait->GetRequestType()) - { //inform query that it has beeen canceled - case EMobilePhoneSetLockSetting: - case EMobilePhoneSetFdnSetting: - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestCanceled); - break; - default: - break; - } - - } + + switch(iWait->GetRequestType()) + { //inform query that it has beeen canceled + case EMobilePhoneSetLockSetting: + case EMobilePhoneSetFdnSetting: + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestCanceled); + break; + default: + break; + } + + } // close phone if (iPhone.SubSessionHandle()) iPhone.Close(); @@ -194,21 +191,173 @@ // CSecuritySettings::ChangePinL() // Changes PIN1 // ---------------------------------------------------------- -// qtdone +// EXPORT_C void CSecuritySettings::ChangePinL() { - RDEBUG("0", 0); - RMobilePhone::TMobilePassword iOldPassword; - RMobilePhone::TMobilePassword iNewPassword; - TInt iFlags = ESecUiTypeLock; - iOldPassword.Copy(_L("")); - iNewPassword.Copy(_L("")); + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + + TInt simState; + TInt err( KErrGeneral ); + err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); + User::LeaveIfError( err ); + TBool simRemoved(simState == ESimNotPresent); + + if ( simRemoved ) + { + ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); + return; + } + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinL()")); + #endif + RMobilePhone::TMobilePhoneSecurityCode secCodeType; + secCodeType = RMobilePhone::ESecurityCodePin1; + + RMobilePhone::TMobilePassword oldPassword; + RMobilePhone::TMobilePassword newPassword; + RMobilePhone::TMobilePassword verifcationPassword; + RMobilePhone::TMobilePhonePasswordChangeV1 passwords; + RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; + RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); + + CCodeQueryDialog* verdlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(verdlg); + + CCodeQueryDialog* newdlg = new (ELeave) CCodeQueryDialog(newPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(newdlg); + + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (oldPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(dlg); + + RMobilePhone::TMobilePhoneLock lockType; + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + + lockType = RMobilePhone::ELockICC; + + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + User::LeaveIfError(res); - TBuf<0x80> iCaption; - iCaption.Copy(_L("ChangePinL")); // no need to translate. Not used - TInt iShowError = 1; - TInt err = ChangePinParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("err", err); + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + CleanupStack::PopAndDestroy(3,verdlg); + ShowResultNoteL(R_PIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return; + } + + CleanupStack::Pop(); // dlg + iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); + iPhone.GetSecurityCodeInfo(iWait->iStatus, secCodeType, codeInfoPkg); + res = iWait->WaitForRequestL(); + User::LeaveIfError(res); + // ask pin + if( codeInfo.iRemainingEntryAttempts >= KMaxNumberOfPINAttempts ) + res = dlg->ExecuteLD(R_PIN_QUERY); + else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt) + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts); + res = dlg->ExecuteLD(R_PIN_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + else + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN_ATTEMPT); + res = dlg->ExecuteLD(R_PIN_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + + if( !res ) + { + CleanupStack::PopAndDestroy(2,verdlg); + return; + } + CleanupStack::Pop(); // newdlg + // new pin code query + if (!(newdlg->ExecuteLD(R_NEW_PIN_CODE_QUERY))) + { + CleanupStack::PopAndDestroy(verdlg); + return; + } + + CleanupStack::Pop(); // verdlg + // verification code query + if (!(verdlg->ExecuteLD(R_VERIFY_NEW_PIN_CODE_QUERY))) + return; + + while (newPassword.CompareF(verifcationPassword) != 0) + { + // codes do not match -> note -> ask new pin and verification codes again + ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone); + + newPassword = _L(""); + verifcationPassword = _L(""); + + // new pin code query + CCodeQueryDialog* newdlg = new (ELeave) CCodeQueryDialog (newPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + if (!(newdlg->ExecuteLD(R_NEW_PIN_CODE_QUERY))) + return; + + // verification code query + CCodeQueryDialog* verdlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + if (!(verdlg->ExecuteLD(R_VERIFY_NEW_PIN_CODE_QUERY))) + return; + } + + // send code + passwords.iOldPassword = oldPassword; + passwords.iNewPassword = newPassword; + iWait->SetRequestType(EMobilePhoneChangeSecurityCode); + iPhone.ChangeSecurityCode(iWait->iStatus, secCodeType, passwords); + res = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangePinL(): RETURN CODE: %d"), res); + #endif + switch(res) + { + case KErrNone: + { + // code changed + ShowResultNoteL(R_PIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); + break; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + ChangePinL(); + break; + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + // Pin1 blocked! + return; + } + case KErrGsm0707OperationNotAllowed: + { + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return; + } + case KErrAbort: + { + break; + } + default: + { + ShowErrorNoteL(res); + ChangePinL(); + break; + } + } + } // @@ -216,21 +365,174 @@ // CSecuritySettings::ChangeUPinL() // Changes Universal PIN // ---------------------------------------------------------- -// qtdone +// EXPORT_C void CSecuritySettings::ChangeUPinL() { - RDEBUG("0", 0); - RMobilePhone::TMobilePassword iOldPassword; - RMobilePhone::TMobilePassword iNewPassword; - TInt iFlags = ESecUiTypeLock; - iOldPassword.Copy(_L("")); - iNewPassword.Copy(_L("")); - - TBuf<0x80> iCaption; - iCaption.Copy(_L("ChangeUPinL")); // no need to translate. Not used - TInt iShowError = 1; - TInt err = ChangeUPinParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("err", err); + TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + if(wcdmaSupported || upinSupported) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeUPinL()")); + #endif + TInt simState; + TInt err( KErrGeneral ); + err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); + User::LeaveIfError( err ); + TBool simRemoved(simState == ESimNotPresent); + + if ( simRemoved ) + { + ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); + return; + } + + RMobilePhone::TMobilePhoneSecurityCode secCodeType; + secCodeType = RMobilePhone::ESecurityUniversalPin; + + RMobilePhone::TMobilePassword oldPassword; + RMobilePhone::TMobilePassword newPassword; + RMobilePhone::TMobilePassword verifcationPassword; + RMobilePhone::TMobilePhonePasswordChangeV1 passwords; + RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; + RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); + + CCodeQueryDialog* verdlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(verdlg); + + CCodeQueryDialog* newdlg = new (ELeave) CCodeQueryDialog(newPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(newdlg); + + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (oldPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(dlg); + + RMobilePhone::TMobilePhoneLock lockType; + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + + lockType = RMobilePhone::ELockUniversalPin; + + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + User::LeaveIfError(res); + + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + CleanupStack::PopAndDestroy(3,verdlg); + ShowResultNoteL(R_UPIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return; + } + + CleanupStack::Pop(); // dlg + // ask pin + iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); + iPhone.GetSecurityCodeInfo(iWait->iStatus, secCodeType, codeInfoPkg); + res = iWait->WaitForRequestL(); + User::LeaveIfError(res); + + if( codeInfo.iRemainingEntryAttempts >= KMaxNumberOfPINAttempts ) + res = dlg->ExecuteLD(R_UPIN_QUERY); + else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt) + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_UPIN_ATTEMPTS, codeInfo.iRemainingEntryAttempts); + res = dlg->ExecuteLD(R_UPIN_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + else + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_UPIN_ATTEMPT); + res = dlg->ExecuteLD(R_UPIN_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + + + + if( !res ) + { + CleanupStack::PopAndDestroy(2,verdlg); + return; + } + CleanupStack::Pop(); // newdlg + // new pin code query + if (!(newdlg->ExecuteLD(R_NEW_UPIN_CODE_QUERY))) + { + CleanupStack::PopAndDestroy(verdlg); + return; + } + + CleanupStack::Pop(); // verdlg + // verification code query + if (!(verdlg->ExecuteLD(R_VERIFY_NEW_UPIN_CODE_QUERY))) + return; + + while (newPassword.CompareF(verifcationPassword) != 0) + { + // codes do not match -> note -> ask new pin and verification codes again + ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone); + + newPassword = _L(""); + verifcationPassword = _L(""); + + // new pin code query + CCodeQueryDialog* newdlg = new (ELeave) CCodeQueryDialog (newPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + if (!(newdlg->ExecuteLD(R_NEW_UPIN_CODE_QUERY))) + return; + + // verification code query + CCodeQueryDialog* verdlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + if (!(verdlg->ExecuteLD(R_VERIFY_NEW_UPIN_CODE_QUERY))) + return; + } + + // send code + passwords.iOldPassword = oldPassword; + passwords.iNewPassword = newPassword; + iWait->SetRequestType(EMobilePhoneChangeSecurityCode); + iPhone.ChangeSecurityCode(iWait->iStatus, secCodeType, passwords); + res = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangePinL(): RETURN CODE: %d"), res); + #endif + switch(res) + { + case KErrNone: + { + // code changed + ShowResultNoteL(R_UPIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); + break; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + ChangeUPinL(); + break; + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + return; + } + case KErrGsm0707OperationNotAllowed: + { + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return; + } + case KErrAbort: + { + break; + } + default: + { + ShowErrorNoteL(res); + ChangeUPinL(); + break; + } + } + } } @@ -239,873 +541,48 @@ // CSecuritySettings::ChangePin2L() // Changes PIN2 // ---------------------------------------------------------- -// qtdone +// EXPORT_C void CSecuritySettings::ChangePin2L() { - RDEBUG("0", 0); - RMobilePhone::TMobilePassword iOldPassword; - RMobilePhone::TMobilePassword iNewPassword; - TInt iFlags = ESecUiTypeLock; - iOldPassword.Copy(_L("")); - iNewPassword.Copy(_L("")); - - TBuf<0x80> iCaption; - iCaption.Copy(_L("ChangePin2L")); // no need to translate. Not used - TInt iShowError = 1; - TInt err = ChangePin2ParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("err", err); - } -// -// ---------------------------------------------------------- -// CSecuritySettings::ChangeSecCodeL() -// Changes security code -// ---------------------------------------------------------- -// qtdone -EXPORT_C void CSecuritySettings::ChangeSecCodeL() - { - RDEBUG("0", 0); - RMobilePhone::TMobilePassword iOldPassword; - RMobilePhone::TMobilePassword iNewPassword; - TInt iFlags = 0; - iOldPassword.Copy(_L("")); - iNewPassword.Copy(_L("")); - - TBuf<0x80> iCaption; - iCaption.Copy(_L("ChangeSecCodeL")); // no need to translate. Not used - TInt iShowError = 1; - TInt err = ChangeSecCodeParamsL(iOldPassword, iNewPassword, iFlags, iCaption, iShowError); - RDEBUG("err", err); - } -// -// ---------------------------------------------------------- -// CSecuritySettings::ChangeAutoLockPeriodL() -// Changes autolock period -// ---------------------------------------------------------- -// qtdone -EXPORT_C TInt CSecuritySettings::ChangeAutoLockPeriodL(TInt aPeriod) - { - TInt ret = 0; - RDEBUG("aPeriod", aPeriod); - RMobilePhone::TMobilePassword iOldPassword; - TInt iFlags = 0; - TInt iShowError = 1; - TBuf<0x80> iCaption; - iCaption.Copy(_L("ChangeAutoLockPeriodL")); // no need to translate. Not used - iOldPassword.Copy(_L("")); - ret = ChangeAutoLockPeriodParamsL(aPeriod, iOldPassword, iFlags, iCaption, iShowError); - RDEBUG("ret", ret); - return ret; - } - -// -// ---------------------------------------------------------- -// CSecuritySettings::ChangeRemoteLockStatusL() -// Changes remote lock status (on/off) -// ---------------------------------------------------------- -// no qtdone -EXPORT_C TInt CSecuritySettings::ChangeRemoteLockStatusL(TBool& aRemoteLockStatus, TDes& aRemoteLockCode, TInt aAutoLockPeriod) - { - TInt retValue(KErrNone); - RDEBUG("aRemoteLockStatus", aRemoteLockStatus); - RDEBUG("aAutoLockPeriod", aAutoLockPeriod); - - if (aRemoteLockStatus) - { - aRemoteLockStatus = ETrue; - - // If user wishes to enable remote lock - // a new remote lock code is required. - // RemoteLockCodeQueryL also - retValue = RemoteLockCodeQueryL(aRemoteLockCode); - } - else - { - aRemoteLockStatus = EFalse; - retValue = KErrNone; - // TODO this should calculate aAutoLockPeriod itself, and not trust the input + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePin2L()")); + #endif + TInt simState; + TInt err( KErrGeneral ); + err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); + User::LeaveIfError( err ); + TBool simRemoved(simState == ESimNotPresent); - // Check whether AutoLock is enabled (timeout value greater - // than zero) or not. If AutoLock is enabled the domestic OS - // device lock should be left enabled. - if (aAutoLockPeriod == 0) - { - // Disable lock setting from domestic OS - retValue = RemoteLockSetLockSettingL(EFalse); - } - else - { - // If AutoLock is enabled, don't disable the DOS device lock - // Re-set (enable) the domestic OS device lock because as a - // side effect it requires the security code from the user - retValue = RemoteLockSetLockSettingL(ETrue); - } - } - RDEBUG( "retValue", retValue ); - return retValue; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::RemoteLockCodeQueryL() -// Pops up remote lock code query. Requires user to enter a new remote lock -// code (RemoteMsg) twice and if they match enables the domestic OS device lock (which as -// a side effect pops up security code query). -// Note: if the RemoteMsg is cancelled, nevertheless the lock is activated. This is done because the code is askedirst, and the only way to do so is by enabling the lock. -// This is not a problem, because: -// a) first the RemoteMsg is enable, and this function is used to change it -// b) if lock was disabled, the "change RemoteMsg" menu is not available. -// ---------------------------------------------------------- -// qtdone -TInt CSecuritySettings::RemoteLockCodeQueryL(TDes& aRemoteLockCode) - { - - TInt retValue(KErrNone); - - // This is done because lock-code needs to be asked first. - // Enable lock setting in domestic OS. It is safe to enable the - // lock setting since RemoteLock API requires remote locking to - // be enabled when changing or setting the remote lock message. - retValue = RemoteLockSetLockSettingL(ETrue); - RDEBUG( "retValue", retValue ); - if (retValue != KErrNone) - return retValue; - aRemoteLockCode.Zero(); - - TInt queryAccepted = KErrCancel; - queryAccepted = KErrCancel; - CSecQueryUi * iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - // this queries both, and verifies itself - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_rem_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("|")); - HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("Verify")); - title.Append(stringHolder2->Des()); - CleanupStack::PopAndDestroy(stringHolder2); - queryAccepted = iSecQueryUi->SecQueryDialog(title, aRemoteLockCode, SEC_REMOTELOCK_CODE_MIN_LENGTH, SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiAlphaSupported - | ESecUiCancelSupported | ESecUiEmergencyNotSupported | ESecUiNone); - RDEBUG("aRemoteLockCode", 0); - RDEBUGSTR(aRemoteLockCode); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - - // Check that the new remote lock code doesn't match the security code of the device. - RMobilePhone::TMobilePhoneSecurityCode secCodeType = RMobilePhone::ESecurityCodePhonePassword; - RMobilePhone::TMobilePassword securityCode; - RMobilePhone::TMobilePassword unblockCode; // Required here only as a dummy parameter - - - securityCode = aRemoteLockCode; - RDEBUG( "EMobilePhoneVerifySecurityCode", EMobilePhoneVerifySecurityCode ); - iWait->SetRequestType(EMobilePhoneVerifySecurityCode); - RDEBUG( "VerifySecurityCode", 0 ); - iPhone.VerifySecurityCode(iWait->iStatus, secCodeType, securityCode, unblockCode); - RDEBUG( "WaitForRequestL", 0 ); - TInt res = iWait->WaitForRequestL(); - RDEBUG( "WaitForRequestL res", res ); -#ifdef __WINS__ - if (res == KErrNotSupported || res == KErrTimedOut) - res = KErrGsm0707IncorrectPassword; // KErrGsm0707IncorrectPassword = incorrect code -#endif - RDEBUG( "KErrGsm0707IncorrectPassword", KErrGsm0707IncorrectPassword ); - if (res == KErrNone) + if ( simRemoved ) { - // The message is also valid as a lock-code, this means that - // remote lock code matches the security code - // and that is not allowed - RDEBUG( "return KErrCancel because msg matches code", KErrCancel ); - ShowResultNoteL(R_REMOTELOCK_INVALID_CODE, CAknNoteDialog::EErrorTone); - return KErrCancel; - } - - RDEBUG( "retValue", retValue ); - return retValue; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::RemoteLockSetLockSettingL() -// Changes lock setting in domestic OS. Changing the domestic OS lock setting -// requires user to enter the security code. -// ---------------------------------------------------------- -// qtdone -TInt CSecuritySettings::RemoteLockSetLockSettingL(TBool aLockSetting) - { - TInt retValue(KErrNone); - RDEBUG( "aLockSetting", aLockSetting ); - - RMobilePhone::TMobilePhoneLockSetting lockSetting = RMobilePhone::ELockSetEnabled; - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; - - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - - //get lock info - iWait->SetRequestType(EMobilePhoneGetLockInfo); - RDEBUG("GetLockInfo", 0); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); - -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - { - lockInfo.iSetting = RMobilePhone::ELockSetDisabled; - status = KErrNone; - } -#endif - User::LeaveIfError(status); - RDEBUG("current lockInfo.iSetting", lockInfo.iSetting); - - // disabled->disabled should not happen - // enabled->enabled happens because a change of message also forces a code re-validation - if (aLockSetting) - { - lockSetting = RMobilePhone::ELockSetEnabled; - } - else - { - lockSetting = RMobilePhone::ELockSetDisabled; - } - RDEBUG("future lockSetting", lockSetting); - - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG( "SetLockSetting", 0 ); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockSetting); // this will PassPhraseRequiredL - RDEBUG( "WaitForRequestL", 0 ); - retValue = iWait->WaitForRequestL(); - RDEBUG( "WaitForRequestL retValue", retValue ); -#ifdef __WINS__ - if (retValue == KErrNotSupported || retValue == KErrTimedOut) - retValue = KErrNone; -#endif - - switch (retValue) - { - case KErrNone: - break; - - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - // Security code was entered erroneously - //Error note is shown in CSecurityHandler::PassPhraseRequired() - break; - - case KErrAbort: - break; - - default: - break; - } - - RDEBUG( "retValue", retValue ); - return retValue; - } - -// -// ---------------------------------------------------------- -// CSecuritySettings::ChangeSimSecurityL() -// Changes SIM security -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::ChangeSimSecurityL() - { - /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - RDEBUG("0", 0); - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneToICC; - RMobilePhone::TMobilePhoneLockSetting lockChangeSetting; - - //get lock info - iWait->SetRequestType(EMobilePhoneGetLockInfo); - RDEBUG("GetLockInfo", 0); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); - -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - { - lockInfo.iSetting = RMobilePhone::ELockSetDisabled; - status = KErrNone; - } -#endif - User::LeaveIfError(status); - TInt currentItem = 0; - RDEBUG("lockInfo.iSetting", lockInfo.iSetting); - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { - currentItem = 1; // off - } - - if (currentItem == 0) // switch the flag - { - lockChangeSetting = RMobilePhone::ELockSetDisabled; - } - else - { - lockChangeSetting = RMobilePhone::ELockSetEnabled; - } - RDEBUG("lockChangeSetting", lockChangeSetting); - - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG("SetLockSetting", 0); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockChangeSetting); // this invokes the handler - RDEBUG("WaitForRequestL", 0); - status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - status = KErrNone; -#endif - - // the error was displayed in the handler - RDEBUG("status", status); - switch (status) - { - case KErrNone: - { - break; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously - return ChangeSimSecurityL(); - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - return ChangeSimSecurityL(); - } - case KErrAbort: - { - return EFalse; - } - default: - { - ShowErrorNoteL(status); - return ChangeSimSecurityL(); - } + ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); + return; } - return ETrue; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::ChangePinRequestL() -// Changes PIN1 request -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::ChangePinRequestL() - { - RDEBUG("0", 0); - - RMobilePhone::TMobilePassword iOldPassword; - TInt iFlags = 0; - iOldPassword.Copy(_L("")); - - TBuf<0x80> iCaption; - iCaption.Copy(_L("ChangePinRequestL")); // no need to translate. Not used - TInt iShowError = 1; - TInt err = ChangePinRequestParamsL(1/* it's imposible to know if we want to set or clear*/, iOldPassword, iFlags, iCaption, iShowError); - RDEBUG("err", err); - if (err == KErrNone) - return ETrue; - else - return EFalse; - } - -// -// ---------------------------------------------------------- -// CSecuritySettings::ChangeUPinRequestL() -// Changes UPIN request on/off -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::ChangeUPinRequestL() - { - TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); - TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); - RDEBUG("wcdmaSupported", wcdmaSupported); - RDEBUG("upinSupported", upinSupported); - if (wcdmaSupported || upinSupported) - { - TInt simState; - TInt err(KErrGeneral); - err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); - User::LeaveIfError(err); - TBool simRemoved(simState == ESimNotPresent); - - if (simRemoved) - { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return EFalse; - } - - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockUniversalPin; - - RMobilePhone::TMobilePhoneLockSetting lockChangeSetting = RMobilePhone::ELockSetDisabled; - - //get lock info - iWait->SetRequestType(EMobilePhoneGetLockInfo); - RDEBUG("GetLockInfo", 0); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - status = KErrNone; -#endif - User::LeaveIfError(status); - TInt currentItem = 0; - - RDEBUG("lockInfo.iSetting", lockInfo.iSetting); - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { - currentItem = 1; // off - } - - if (currentItem == 0) // switch the flag - { - lockChangeSetting = RMobilePhone::ELockSetDisabled; - } - else - { - lockChangeSetting = RMobilePhone::ELockSetEnabled; - } - RDEBUG("lockChangeSetting", lockChangeSetting); - // Raise a flag to indicate that the UPIN - // request coming from ETEL has originated from SecUi and not from Engine. - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginated); - // Change the lock setting - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG("SetLockSetting", 0); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockChangeSetting); // this calls something in the handler - RDEBUG("WaitForRequestL", 0); - status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); - // Lower the flag - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginatedUninitialized); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - status = KErrNone; -#endif - - // no need to show errors because they were displayed in the Handler - switch (status) - { - case KErrNone: - { - break; - } - case KErrGsm0707OperationNotAllowed: - { - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return EFalse; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously - return ChangeUPinRequestL(); - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - return EFalse; - } - case KErrAbort: - { - return EFalse; - } - default: - { - ShowErrorNoteL(status); - return ChangeUPinRequestL(); - } - } - - return ETrue; - } - else - return EFalse; - - } - -// -// ---------------------------------------------------------- -// CSecuritySettings::SwitchPinCodesL() -// Changes the pin code currently in use (PIN/UPIN) -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::SwitchPinCodesL() - { - TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); - TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); - RDEBUG("wcdmaSupported", wcdmaSupported); - RDEBUG("upinSupported", upinSupported); - if (wcdmaSupported || upinSupported) - { - // If we are in simless offline mode the PIN codes can't obviously be switched - TInt simState; - TInt err(KErrGeneral); - err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); - User::LeaveIfError(err); - TBool simRemoved(simState == ESimNotPresent); - - if (simRemoved) - { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return EFalse; - } - - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockUniversalPin; - RMobilePhone::TMobilePhoneLockSetting lockChangeSetting = RMobilePhone::ELockReplaced; - RMobilePhone::TMobilePhoneSecurityCode activeCode; - - iCustomPhone.GetActivePin(activeCode); - - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - RDEBUG("EMobilePhoneGetLockInfo", EMobilePhoneGetLockInfo); - iWait->SetRequestType(EMobilePhoneGetLockInfo); - - if (activeCode == RMobilePhone::ESecurityUniversalPin) - { - lockType = RMobilePhone::ELockUniversalPin; - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported || res == KErrTimedOut) - res = KErrNone; -#endif - User::LeaveIfError(res); - } - else - { - lockType = RMobilePhone::ELockICC; - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported || res == KErrTimedOut) - res = KErrNone; -#endif - User::LeaveIfError(res); - } - - // code request must be ON to change active code. - RDEBUG("lockInfo.iSetting", lockInfo.iSetting); - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { - - if (activeCode != RMobilePhone::ESecurityUniversalPin) - { - ShowResultNoteL(R_UPIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - } - else - { - ShowResultNoteL(R_PIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - } - return EFalse; - } - - iCustomPhone.GetActivePin(activeCode); - TInt currentItem = 0; - - RDEBUG("activeCode", activeCode); - if (activeCode == RMobilePhone::ESecurityUniversalPin) - { - currentItem = 1; // UPIN - } - if (currentItem == 0) // switch the flag - { - lockType = RMobilePhone::ELockUniversalPin; - } - else - { - lockType = RMobilePhone::ELockICC; - } - RDEBUG("lockType", lockType); - - // Raise a flag to indicate that the code - // request coming from ETEL has originated from SecUi and not from Engine. - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginated); - // Change the lock setting - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG("SetLockSetting", 0); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockChangeSetting); // request from handler - RDEBUG("WaitForRequestL", 0); - TInt status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); - // Lower the flag - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginatedUninitialized); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - status = KErrNone; -#endif - - // errors are shown in the handler - switch (status) - { - case KErrNone: - { - break; - } - case KErrGsm0707OperationNotAllowed: - { - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return EFalse; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously - return SwitchPinCodesL(); - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - return EFalse; - } - case KErrAbort: - { - return EFalse; - } - default: - { - ShowErrorNoteL(status); - return SwitchPinCodesL(); - } - } - - return ETrue; - } - else - return EFalse; - } - -// -// ---------------------------------------------------------- -// CSecuritySettings::IsLockEnabledL() -// Return is lock enabled/disabled -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::IsLockEnabledL(RMobilePhone::TMobilePhoneLock aLockType) - { - TBool ret = EFalse; - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - //get lock info - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - iWait->SetRequestType(EMobilePhoneGetLockInfo); - RDEBUG("GetLockInfo", 0); - iPhone.GetLockInfo(iWait->iStatus, aLockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); - - if (res != KErrNone) - ret = ETrue; - //lock is enabled return true - else if (lockInfo.iSetting == RMobilePhone::ELockSetEnabled) - { - ret = ETrue; - } - RDEBUG("ret", ret); - return ret; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::AskSecCodeL() -// For asking security code e.g in settings -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::AskSecCodeL() - { - return iSecurityHandler->AskSecCodeL(); - } -// -// ---------------------------------------------------------- -// CSecuritySettings::AskPin2L() -// Asks PIN2 -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::AskPin2L() - { - /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - RDEBUG("0", 0); - TInt retPhone = 0; - // check if pin2 is blocked... - RMmCustomAPI::TSecurityCodeType secCodeType = RMmCustomAPI::ESecurityCodePin2; - RMobilePhone::TMobilePhoneSecurityCode etelsecCodeType(RMobilePhone::ESecurityCodePin2); + RMmCustomAPI::TSecurityCodeType secCodeType; + RMobilePhone::TMobilePhoneSecurityCode EtelsecCodeType; + secCodeType = RMmCustomAPI::ESecurityCodePin2; + RMobilePhone::TMobilePassword oldPassword; + RMobilePhone::TMobilePassword newPassword; + RMobilePhone::TMobilePassword verifcationPassword; + RMobilePhone::TMobilePhonePasswordChangeV1 passwords; RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); - RMobilePhone::TMobilePassword password; + + // check if pin2 is blocked... TBool isBlocked = EFalse; - TInt queryAccepted = KErrCancel; - //Check whether PIN2 is blocked - retPhone = iCustomPhone.IsBlocked(secCodeType, isBlocked); - - RDEBUG("retPhone", retPhone); - RDEBUG("isBlocked", isBlocked); -#ifdef __WINS__ - if (retPhone == KErrNotSupported || retPhone == KErrTimedOut) - retPhone = KErrNone; -#endif - if (isBlocked) - return EFalse; - - if (retPhone != KErrNone) - { - switch (retPhone) - { - // PIN2 Blocked. - case KErrGsm0707SIMPuk2Required: - break; - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - // Pin2 features blocked permanently! - ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone); - break; - case KErrGsm0707SimNotInserted: - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - break; - default: - ShowErrorNoteL(retPhone); - break; - } - return EFalse; - } - iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); - RDEBUG("GetSecurityCodeInfo", 0); - iPhone.GetSecurityCodeInfo(iWait->iStatus, etelsecCodeType, codeInfoPkg); - RDEBUG("WaitForRequestL", 0); - retPhone = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL retPhone", retPhone); -#ifdef __WINS__ - if (retPhone == KErrNotSupported || retPhone == KErrTimedOut) - { - retPhone = KErrNone; - codeInfo.iRemainingEntryAttempts = 3; - } -#endif - User::LeaveIfError(retPhone); - - RDEBUG("codeInfo.iRemainingEntryAttempts", - codeInfo.iRemainingEntryAttempts); - if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) - codeInfo.iRemainingEntryAttempts = -1; - // ask pin2 code - /* request PIN using QT */ - queryAccepted = KErrCancel; - CSecQueryUi *iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_pin2_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("$")); - title.AppendNum(codeInfo.iRemainingEntryAttempts); - queryAccepted = iSecQueryUi->SecQueryDialog(title, password, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("password", 0); - RDEBUGSTR(password); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return EFalse; - - // verify code - RMobilePhone::TMobilePassword required_fourth; - iWait->SetRequestType(EMobilePhoneVerifySecurityCode); - RDEBUG("VerifySecurityCode", 0); - iPhone.VerifySecurityCode(iWait->iStatus, etelsecCodeType, password, required_fourth); - RDEBUG("WaitForRequestL", 0); - retPhone = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL retPhone", retPhone); -#ifdef __WINS__ - if (retPhone == KErrNotSupported) - retPhone = KErrNone; -#endif - - switch (retPhone) - { - case KErrNone: - break; - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - // code was entered erroneously - ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); - return AskPin2L(); - case KErrGsm0707OperationNotAllowed: - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return EFalse; - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - // code was blocked - ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); - return EFalse; - default: - ShowErrorNoteL(retPhone); - return AskPin2L(); - } - - return ETrue; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::SetFdnModeL() -// Activates or deactivates Fixed Dialling Numbers (FDN) mode. -// ---------------------------------------------------------- -// not qtdone -EXPORT_C void CSecuritySettings::SetFdnModeL() - { - /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - RDEBUG("0", 0); - RMmCustomAPI::TSecurityCodeType secCodeType = RMmCustomAPI::ESecurityCodePin2; - - TBool isBlocked = EFalse; - TInt ret = iCustomPhone.IsBlocked(secCodeType, isBlocked); - RDEBUG("isBlocked", isBlocked); - RDEBUG("ret", ret); - if (isBlocked) + TInt ret = iCustomPhone.IsBlocked(secCodeType,isBlocked); + + if(isBlocked) return; - + if (ret != KErrNone) - { + { switch (ret) { // PIN2 Blocked. @@ -1126,39 +603,1785 @@ } return; } + + CCodeQueryDialog* verdlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(verdlg); + CCodeQueryDialog* newdlg = new (ELeave) CCodeQueryDialog(newPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(newdlg); + + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (oldPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(dlg); + + + // Security code must be changed to Etel API format + // Custom API Pin1 and Pin2 have the same enum values as the Etel ones + EtelsecCodeType = (RMobilePhone::TMobilePhoneSecurityCode)secCodeType; + #ifndef __WINS__ + iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); + iPhone.GetSecurityCodeInfo(iWait->iStatus, EtelsecCodeType, codeInfoPkg); + ret = iWait->WaitForRequestL(); + User::LeaveIfError(ret); + #else + codeInfo.iRemainingEntryAttempts = 1; + #endif //__WINS__ + + if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) + ret = dlg->ExecuteLD(R_PIN2_QUERY); + else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt) + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN2_ATTEMPTS, codeInfo.iRemainingEntryAttempts ); + ret = dlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + else + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN2_ATTEMPT); + ret = dlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + + CleanupStack::Pop(); // dlg + if(!ret) + { + CleanupStack::PopAndDestroy(2,verdlg); + return; + } + + // new pin code query + CleanupStack::Pop(); // newdlg + if(!(newdlg->ExecuteLD(R_NEW_PIN2_CODE_QUERY))) + { + CleanupStack::PopAndDestroy(verdlg); + return; + } + + // verification code query + CleanupStack::Pop(); // verdlg + if(!(verdlg->ExecuteLD(R_VERIFY_NEW_PIN2_CODE_QUERY))) + { + return; + } + + while (newPassword.CompareF(verifcationPassword) != 0) + { + // codes do not match -> note -> ask new pin and verification codes again + ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone); + + newPassword = _L(""); + verifcationPassword = _L(""); + + // new pin code query + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (newPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone); + if(!(dlg->ExecuteLD(R_NEW_PIN2_CODE_QUERY))) + return; + + // verification code query + CCodeQueryDialog* dlg2 = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_PIN2_CODE_MIN_LENGTH,SEC_C_PIN2_CODE_MAX_LENGTH,ESecUiNone); + if(!(dlg2->ExecuteLD(R_VERIFY_NEW_PIN2_CODE_QUERY))) + return; + } + + + passwords.iOldPassword = oldPassword; + passwords.iNewPassword = newPassword; + iWait->SetRequestType(EMobilePhoneChangeSecurityCode); + iPhone.ChangeSecurityCode(iWait->iStatus,EtelsecCodeType,passwords); + TInt res = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangePin2L(): RETURN CODE: %d"), res); + #endif + switch(res) + { + case KErrNone: + { + // code changed + ShowResultNoteL(R_PIN2_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); + break; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + ChangePin2L(); + break; + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + // Pin2 blocked! + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + CSecurityHandler* handler = new(ELeave) CSecurityHandler(iPhone); + CleanupStack::PushL(handler); + handler->HandleEventL(RMobilePhone::EPuk2Required); + CleanupStack::PopAndDestroy(handler); // handler + return; + } + case KErrGsm0707OperationNotAllowed: + { + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return; + } + case KErrAbort: + { + break; + } + default: + { + ShowErrorNoteL(res); + ChangePin2L(); + break; + } + } + } +// +// ---------------------------------------------------------- +// CSecuritySettings::ChangeSecCodeL() +// Changes security code +// ---------------------------------------------------------- +// +EXPORT_C void CSecuritySettings::ChangeSecCodeL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeSecCodeL()")); + #endif + TInt res; + RMobilePhone::TMobilePassword newPassword; +if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) && + (FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements ))) +{ + + // Connect to the SCP server, and request the code change + RSCPClient scpClient; + User::LeaveIfError( scpClient.Connect() ); + CleanupClosePushL( scpClient ); + res = scpClient.ChangeCodeRequest(); + CleanupStack::PopAndDestroy(); // scpClient + +} +else +{ + + RMobilePhone::TMobilePhoneSecurityCode secCodeType; + secCodeType = RMobilePhone::ESecurityCodePhonePassword; + RMobilePhone::TMobilePassword oldPassword; + RMobilePhone::TMobilePassword verifcationPassword; + RMobilePhone::TMobilePassword required_fourth; + RMobilePhone::TMobilePhonePasswordChangeV1 passwords; + + CCodeQueryDialog* verdlg = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_CHANGE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(verdlg); + + CCodeQueryDialog* newdlg = new (ELeave) CCodeQueryDialog(newPassword,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_CHANGE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(newdlg); + + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (oldPassword,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_MAX_LENGTH,ESecUiNone); + CleanupStack::PushL(dlg); + + // ask security code + CleanupStack::Pop(); // dlg + if (!(dlg->ExecuteLD(R_SECURITY_QUERY))) + { + CleanupStack::PopAndDestroy(2,verdlg); + return; + } + // new security code query + CleanupStack::Pop(); // newdlg + if(!(newdlg->ExecuteLD(R_NEW_SECURITY_CODE_QUERY))) + { + CleanupStack::PopAndDestroy(verdlg); + return; + } + + // verification code query + CleanupStack::Pop(); // verdlg + if(!(verdlg->ExecuteLD(R_VERIFY_NEW_SECURITY_CODE_QUERY))) + { + return; + } + + while (newPassword.CompareF(verifcationPassword) != 0) + { + // codes do not match -> note -> ask new pin and verification codes again + ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone); + + newPassword = _L(""); + verifcationPassword = _L(""); + + // new pin code query + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (newPassword,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_CHANGE_MAX_LENGTH,ESecUiNone); + if(!(dlg->ExecuteLD(R_NEW_SECURITY_CODE_QUERY))) + return; + + // verification code query + CCodeQueryDialog* dlg2 = new (ELeave) CCodeQueryDialog (verifcationPassword,SEC_C_SECURITY_CODE_MIN_LENGTH,SEC_C_SECURITY_CODE_CHANGE_MAX_LENGTH,ESecUiNone); + if(!(dlg2->ExecuteLD(R_VERIFY_NEW_SECURITY_CODE_QUERY))) + return; + } + iWait->SetRequestType(EMobilePhoneVerifySecurityCode); + // check code + iPhone.VerifySecurityCode(iWait->iStatus,secCodeType, oldPassword, required_fourth); + res = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangeSecCode(): CODE VERIFY RESP: %d"), res); + #endif + // change code + if (res == KErrNone) + { + passwords.iOldPassword = oldPassword; + passwords.iNewPassword = newPassword; + iWait->SetRequestType(EMobilePhoneChangeSecurityCode); + iPhone.ChangeSecurityCode(iWait->iStatus,secCodeType,passwords); + res = iWait->WaitForRequestL(); + } + +} + + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangeSecCode(): RETURN CODE: %d"), res); + #endif + switch(res) + { + case KErrNone: + { + // code changed + ShowResultNoteL(R_SECURITY_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); + if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw ) && + !(FeatureManager::FeatureSupported(KFeatureIdSapDeviceLockEnhancements ))) + { + // Send the changed code to the SCP server. Not used with device lock enhancements. + + RSCPClient scpClient; + TSCPSecCode newCode; + newCode.Copy( newPassword ); + if ( scpClient.Connect() == KErrNone ) + { + scpClient.StoreCode( newCode ); + scpClient.Close(); + } + } + + break; + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + ShowResultNoteL(R_SEC_BLOCKED, CAknNoteDialog::EErrorTone); + ChangeSecCodeL(); + break; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + ChangeSecCodeL(); + break; + } + case KErrAbort: + { + break; + } + default: + { + ShowErrorNoteL(res); + ChangeSecCodeL(); + break; + } + } + } +// +// ---------------------------------------------------------- +// CSecuritySettings::ChangeAutoLockPeriodL() +// Changes autolock period +// ---------------------------------------------------------- +// +EXPORT_C TInt CSecuritySettings::ChangeAutoLockPeriodL(TInt aPeriod) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodLXXXX()")); + #endif + RMobilePhone::TMobilePhoneLockSetting lockChange(RMobilePhone::ELockSetDisabled); + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; + TInt currentItem = 0; + TInt oldPeriod = aPeriod; + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() ReadDesC16ArrayResourceL")); + #endif + + + CCoeEnv* coeEnv = CCoeEnv::Static(); + CDesCArrayFlat* items = coeEnv->ReadDesC16ArrayResourceL(R_AUTOLOCK_LBX); + CleanupStack::PushL(items); + + if (aPeriod == 0) + { + currentItem = 0; // autolock off + } + else + { + currentItem = 1; // user defined + } + + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() New autolocksettingpage")); + #endif + + CAutoLockSettingPage* dlg = new (ELeave)CAutoLockSettingPage(R_AUTOLOCK_SETTING_PAGE, currentItem, items, aPeriod); + CleanupStack::PushL(dlg); + dlg->ConstructL(); + TInt maxPeriod; + if(FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw )) + { + // Retrieve the current autolock period max. value from the SCP server, + // and check that the value the user + // selected is ok from the Corporate Policy point of view. + RSCPClient scpClient; + TInt ret = scpClient.Connect(); + if ( ret == KErrNone ) + { + CleanupClosePushL( scpClient ); + TBuf maxPeriodBuf; + if ( scpClient.GetParamValue( ESCPMaxAutolockPeriod, maxPeriodBuf ) == KErrNone ) + { + TLex lex( maxPeriodBuf ); + if ( ( lex.Val( maxPeriod ) == KErrNone ) && ( maxPeriod > 0 ) ) + { + dlg->SetPeriodMaximumValue(maxPeriod); + } + else + { + maxPeriod = 0; + dlg->SetPeriodMaximumValue(maxPeriod); + } + + } + else + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL():\ + ERROR: Failed to retrieve max period")); + #endif + } + } + else + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL():\ + ERROR: Failed to connect to SCP.")); + #endif + } + CleanupStack::PopAndDestroy(); // scpClient +} + CleanupStack::Pop(); //dlg + if (!dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) + { + CleanupStack::PopAndDestroy(items); + return oldPeriod; + } + + CleanupStack::PopAndDestroy(); // items + + if ( FeatureManager::FeatureSupported( KFeatureIdSapTerminalControlFw ) ) + { + // define a flag indicating whether disable autolock is allowed. + TBool allowDisableAL = ETrue; + + if ( ( aPeriod == 0 ) && ( maxPeriod > 0 ) ) + { + #if defined( _DEBUG ) + RDebug::Print( + _L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() \ + The period: %d is not allowed by TARM; max: %d" ), + aPeriod, maxPeriod ); + #endif + allowDisableAL = EFalse; + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( + R_SECUI_TEXT_AUTOLOCK_MUST_BE_ACTIVE ); + CAknNoteDialog* noteDlg = new ( ELeave ) CAknNoteDialog( + REINTERPRET_CAST( CEikDialog**,¬eDlg ) ); + noteDlg->PrepareLC( R_CODE_ERROR ); + noteDlg->SetTextL( *prompt ); + noteDlg->SetTimeout( CAknNoteDialog::ELongTimeout ); + noteDlg->SetTone( CAknNoteDialog::EErrorTone ); + noteDlg->RunLD(); + CleanupStack::PopAndDestroy( prompt ); + } + + if ( !allowDisableAL ) + { + return ChangeAutoLockPeriodL( oldPeriod ); + } + } + + if (aPeriod == 0) + { + + #ifdef RD_REMOTELOCK + + // If remote lock is enabled, don't disable the domestic OS device lock + // since that would render the RemoteLock useless. + // Instead just re-set the DOS lock to enabled which as a side effect + // requests the security code from the user. + + TBool remoteLockStatus( EFalse ); + CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL(); + + if ( remoteLockSettings->GetEnabled( remoteLockStatus ) ) + { + if ( remoteLockStatus ) + { + // Remote lock is enabled + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeAutoLockPeriodL() - RemoteLock is enabled: lockChange = RMobilePhone::ELockSetEnabled" ) ); + #endif // _DEBUG + + lockChange = RMobilePhone::ELockSetEnabled; + } + else + { + // Remote lock is disabled + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeAutoLockPeriodL() - RemoteLock is disabled: lockChange = RMobilePhone::ELockSetDisabled" ) ); + #endif // _DEBUG + + lockChange = RMobilePhone::ELockSetDisabled; + } + } + else + { + // Failed to get remote lock status + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeAutoLockPeriodL() - Failed to get RemoteLock status" ) ); + #endif // _DEBUG + } + + delete remoteLockSettings; + remoteLockSettings = NULL; + + #else // not defined RD_REMOTELOCK + + lockChange = RMobilePhone::ELockSetDisabled; + + #endif // RD_REMOTELOCK + } + else + { + lockChange = RMobilePhone::ELockSetEnabled; + } + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() SetLockSetting")); + #endif + iWait->SetRequestType(EMobilePhoneSetLockSetting); + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); + iPhone.SetLockSetting(iWait->iStatus,lockType,lockChange); + TInt status = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL(): RETURN CODE: %d"), status); + #endif + switch(status) + { + case KErrNone: + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() KErrNone")); + #endif + break; + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() PasswordAttemptsViolation")); + #endif + return ChangeAutoLockPeriodL(oldPeriod); + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() IncorrectPassword")); + #endif + // code was entered erroneously + return ChangeAutoLockPeriodL(oldPeriod); + case KErrAbort: + // User pressed "cancel" in the code query dialog. + return oldPeriod; + default: + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() default")); + #endif + return ChangeAutoLockPeriodL(oldPeriod); + } + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeAutoLockPeriodL() END")); + #endif + return aPeriod; + } + + + +// +// ---------------------------------------------------------- +// CSecuritySettings::ChangeRemoteLockStatusL() +// Changes remote lock status (on/off) +// ---------------------------------------------------------- +// +EXPORT_C TInt CSecuritySettings::ChangeRemoteLockStatusL( TBool& aRemoteLockStatus, TDes& aRemoteLockCode, TInt aAutoLockPeriod ) + { + #ifdef RD_REMOTELOCK + TInt retValue( KErrNone ); + + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::ChangeRemoteLockStatusL() - Enter, aRemoteLockStatus == %d, aAutoLockPeriod == %d" ), aRemoteLockStatus, aAutoLockPeriod ); + #endif // _DEBUG + + CCoeEnv* coeEnv = CCoeEnv::Static(); + CDesCArrayFlat* items = coeEnv->ReadDesC16ArrayResourceL( R_REMOTELOCK_LBX ); + CleanupStack::PushL( items ); + + // Store the current remote lock setting + TInt previousItem( 0 ); + TInt currentItem( 0 ); + + if ( aRemoteLockStatus ) + { + previousItem = KRemoteLockSettingItemOn; + currentItem = KRemoteLockSettingItemOn; + } + else + { + previousItem = KRemoteLockSettingItemOff; + currentItem = KRemoteLockSettingItemOff; + } + + // Create Remote Lock setting page for user to enable or disable remote locking + CRemoteLockSettingPage* remoteLockSettingPage = new( ELeave ) CRemoteLockSettingPage( R_REMOTELOCK_SETTING_PAGE, currentItem, items ); + + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeRemoteLockStatusL() - Executing CRemoteLockSettingPage dialog" ) ); + #endif // _DEBUG + + // Execute the remote lock enable/disable dialog + TBool ret = remoteLockSettingPage->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); + + // Setting page list box items (texts) no longer needed + CleanupStack::PopAndDestroy( items ); + + if ( ret ) + { + if ( currentItem == KRemoteLockSettingItemOn ) + { + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeRemoteLockStatusL() - Remote lock status set to ON" ) ); + #endif // _DEBUG + + aRemoteLockStatus = ETrue; + + // If user wishes to enable remote lock + // a new remote lock code is required. + // RemoteLockCodeQueryL also + retValue = RemoteLockCodeQueryL( aRemoteLockCode ); + } + else if ( currentItem == KRemoteLockSettingItemOff ) + { + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeRemoteLockStatusL() - Remote lock status set to OFF" ) ); + #endif // _DEBUG + + aRemoteLockStatus = EFalse; + retValue = KErrNone; + + // Check whether the status was already off + // If not don't make the user enter the security code + // (which occurs when setting the DOS lock setting) for no reason. + if ( currentItem != previousItem ) + { + // Check whether AutoLock is enabled (timeout value greater + // than zero) or not. If AutoLock is enabled the domestic OS + // device lock should be left enabled. + if ( aAutoLockPeriod == 0 ) + { + // Disable lock setting from domestic OS + retValue = RemoteLockSetLockSettingL( EFalse ); + } + else + { + // If AutoLock is enabled, don't disable the DOS device lock + // Re-set (enable) the domestic OS device lock because as a + // side effect it requires the security code from the user + retValue = RemoteLockSetLockSettingL( ETrue ); + } + } + } + else + { + // This should never happen. But if it does don't change anything + retValue = KErrUnknown; + } + } + else + { + // Something went wrong with the RemoteLockSettingPage dialog + retValue = KErrGeneral; + + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeRemoteLockStatusL() - CRemoteLockSettingPage::ExecuteLD() failed" ) ); + #endif // _DEBUG + } + + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::ChangeRemoteLockStatusL() - Exit" ) ); + #endif + + return retValue; + #else //! RD_REMOTELOCK + return KErrNotSupported; + #endif //RD_REMOTELOCK + } +// +// ---------------------------------------------------------- +// CSecuritySettings::RemoteLockCodeQueryL() +// Pops up remote lock code query. Requires user to enter a new remote lock +// code twice and if they match enables the domestic OS device lock (which as +// a side effect pops up security code query). +// ---------------------------------------------------------- +// +TInt CSecuritySettings::RemoteLockCodeQueryL( TDes& aRemoteLockCode ) + { + #ifdef RD_REMOTELOCK + TInt retValue( KErrNone ); + + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::ChangeRemoteLockCodeL() - Enter" ) ); + #endif // _DEBUG + + // Clear the remote lock code buffer + aRemoteLockCode.Zero(); + + // ----- Remote lock code query ------------------------------------------- + + // Execute Remote Lock code query + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeRemoteLockCodeL() - Executing remote lock code query" ) ); + #endif // _DEBUG + + // Load the query prompt from resources + CCodeQueryDialog* codeQuery = new( ELeave ) CCodeQueryDialog( aRemoteLockCode, SEC_REMOTELOCK_CODE_MIN_LENGTH,SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + TInt buttonId = codeQuery->ExecuteLD( R_REMOTELOCK_CODE_QUERY ); + if ( buttonId == EEikBidOk ) + { + // Ok was pressed and the remote lock code seems fine + retValue = KErrNone; + } + else + { + // User pressed Cancel + // Set the code length to zero leaving no trash for possible retry + aRemoteLockCode.Zero(); + retValue = KErrAbort; + } + + if ( retValue != KErrNone ) + { + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::ChangeRemoteLockCodeL() - Exit, Remote lock code error" ) ); + #endif // _DEBUG + + // Can't continue beyond this + return retValue; + } + + // ----- Remote lock code confirm query ----------------------------------- + + // Confirm the code by asking it again + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::ChangeRemoteLockCodeL() - Executing remote lock code verify query" ) ); + #endif // _DEBUG + + // Buffer for the confirmation code + TBuf confirmCode; + + // Load the confirmation query prompt from resources + CCodeQueryDialog* codeConfirmQuery = new( ELeave ) CCodeQueryDialog( confirmCode, SEC_REMOTELOCK_CODE_MIN_LENGTH, SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeConfirmQuery->ExecuteLD( R_VERIFY_REMOTELOCK_CODE_QUERY); + + + if ( buttonId == EEikBidOk ) + { + // Compare codes. Compare returns zero if descriptors have + // the same length and the same content + while ( (aRemoteLockCode.CompareF( confirmCode ) != 0) && (buttonId == EEikBidOk)) + { + //Codes didn't match; zero the bufffers and show the dialog again + aRemoteLockCode.Zero(); + confirmCode.Zero(); + // Codes don't match. Notify user + ShowResultNoteL( R_REMOTELOCK_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone ); + codeQuery = new( ELeave ) CCodeQueryDialog( aRemoteLockCode, SEC_REMOTELOCK_CODE_MIN_LENGTH,SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeQuery->ExecuteLD( R_REMOTELOCK_CODE_QUERY ); + //Unless user pressed Cancel show the verification query + if(buttonId == EEikBidOk) + { + codeConfirmQuery = new( ELeave ) CCodeQueryDialog( confirmCode, SEC_REMOTELOCK_CODE_MIN_LENGTH, SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeConfirmQuery->ExecuteLD( R_VERIFY_REMOTELOCK_CODE_QUERY); + } + + } + //User pressed cancel + if(buttonId != EEikBidOk) + { + // Set the code length to zero leaving no trash for possible retry + // Report error and let the user try again + aRemoteLockCode.Zero(); + confirmCode.Zero(); + retValue = KErrAbort; + } + else + { + // Codes match + confirmCode.Zero(); + + // ----- Check against security code ------------------------------ + + // Check that the new remote lock code doesn't match the security + // code of the device. + + RMobilePhone::TMobilePhoneSecurityCode secCodeType; + secCodeType = RMobilePhone::ESecurityCodePhonePassword; + RMobilePhone::TMobilePassword securityCode; + RMobilePhone::TMobilePassword unblockCode; // Required here only as a dummy parameter + + if ( aRemoteLockCode.Length() <= RMobilePhone::KMaxMobilePasswordSize ) + { + securityCode = aRemoteLockCode; + iWait->SetRequestType( EMobilePhoneVerifySecurityCode ); + iPhone.VerifySecurityCode( iWait->iStatus, secCodeType, securityCode, unblockCode ); + TInt res = iWait->WaitForRequestL(); + // The remote lock code matches the security code + // and that is not allowed + while ( (res == KErrNone) && (buttonId == EEikBidOk)) + { + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::ChangeRemoteLockCodeL() - Unacceptable remote lock code" ) ); + #endif // _DEBUG + aRemoteLockCode.Zero(); + confirmCode.Zero(); + + ShowResultNoteL( R_REMOTELOCK_INVALID_CODE, CAknNoteDialog::EErrorTone ); + + codeQuery = new( ELeave ) CCodeQueryDialog( aRemoteLockCode, SEC_REMOTELOCK_CODE_MIN_LENGTH,SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeQuery->ExecuteLD( R_REMOTELOCK_CODE_QUERY ); + //Unless user pressed Cancel show the verification query + if(buttonId == EEikBidOk) + { + codeConfirmQuery = new( ELeave ) CCodeQueryDialog( confirmCode, SEC_REMOTELOCK_CODE_MIN_LENGTH, SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeConfirmQuery->ExecuteLD( R_VERIFY_REMOTELOCK_CODE_QUERY); + + // Compare codes. Compare returns zero if descriptors have + // the same length and the same content + while ( (aRemoteLockCode.CompareF( confirmCode ) != 0) && (buttonId == EEikBidOk)) + { + //Codes didn't match; zero the bufffers and show the dialog again + aRemoteLockCode.Zero(); + confirmCode.Zero(); + // Codes don't match. Notify user + ShowResultNoteL( R_REMOTELOCK_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone ); + codeQuery = new( ELeave ) CCodeQueryDialog( aRemoteLockCode, SEC_REMOTELOCK_CODE_MIN_LENGTH,SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeQuery->ExecuteLD( R_REMOTELOCK_CODE_QUERY ); + //Unless user pressed Cancel show the verification query + if(buttonId == EEikBidOk) + { + codeConfirmQuery = new( ELeave ) CCodeQueryDialog( confirmCode, SEC_REMOTELOCK_CODE_MIN_LENGTH, SEC_REMOTELOCK_CODE_MAX_LENGTH, ESecUiNone, ETrue ); + buttonId = codeConfirmQuery->ExecuteLD( R_VERIFY_REMOTELOCK_CODE_QUERY); + } + + } + //User pressed cancel + if(buttonId != EEikBidOk) + { + // Set the code length to zero leaving no trash for possible retry + // Report error and let the user try again + aRemoteLockCode.Zero(); + confirmCode.Zero(); + retValue = KErrAbort; + } + else //Check against security code + { + securityCode = aRemoteLockCode; + iWait->SetRequestType( EMobilePhoneVerifySecurityCode ); + iPhone.VerifySecurityCode( iWait->iStatus, secCodeType, securityCode, unblockCode ); + res = iWait->WaitForRequestL(); + } + } + + } + //User pressed cancel + if(buttonId != EEikBidOk) + { + // Set the code length to zero leaving no trash for possible retry + // Report error and let the user try again + aRemoteLockCode.Zero(); + confirmCode.Zero(); + retValue = KErrAbort; + } + } + + // ----- Enable DOS device lock (Security code query) ------------- + + if ( retValue == KErrNone ) + { + // Enable lock setting in domestic OS. It is safe to enable the + // lock setting since RemoteLock API requires remote locking to + // be enabled when changing or setting the remote lock message. + retValue = RemoteLockSetLockSettingL( ETrue ); + } + } + } + else //User pressed Cancel + { + // Set the code length to zero leaving no trash for possible retry + aRemoteLockCode.Zero(); + confirmCode.Zero(); + retValue = KErrAbort; + } + + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::ChangeRemoteLockCodeL() - Exit" ) ); + #endif // _DEBUG + + return retValue; + #else //! RD_REMOTELOCK + return KErrNotSupported; + #endif //RD_REMOTELOCK + } +// +// ---------------------------------------------------------- +// CSecuritySettings::RemoteLockSetLockSettingL() +// Changes lock setting in domestic OS. Changing the domestic OS lock setting +// requires user to enter the security code. +// ---------------------------------------------------------- +// +TInt CSecuritySettings::RemoteLockSetLockSettingL( TBool aLockSetting ) + { + #ifdef RD_REMOTELOCK + TInt retValue( KErrNone ); + + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::RemoteLockSetLockSettingL( %d ) - Enter" ), aLockSetting ); + #endif // _DEBUG + + RMobilePhone::TMobilePhoneLockSetting lockSetting = RMobilePhone::ELockSetEnabled; + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; + + if ( aLockSetting ) + { + lockSetting = RMobilePhone::ELockSetEnabled; + } + else + { + lockSetting = RMobilePhone::ELockSetDisabled; + } + + iWait->SetRequestType( EMobilePhoneSetLockSetting ); + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); + iPhone.SetLockSetting( iWait->iStatus, lockType, lockSetting ); + + // Wait for code verify to complete + retValue = iWait->WaitForRequestL(); + + switch( retValue ) + { + case KErrNone: + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::RemoteLockSetLockSettingL() - EMobilePhoneSetLockSetting request returned KErrNone" ) ); + #endif // _DEBUG + break; + + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::RemoteLockSetLockSettingL() - EMobilePhoneSetLockSetting request returned KErrLocked" ) ); + #endif // _DEBUG + //Error note is shown in CSecurityHandler::PassPhraseRequired() + break; + + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::RemoteLockSetLockSettingL() - EMobilePhoneSetLockSetting request returned KErrAccessDenied" ) ); + #endif // _DEBUG + // Security code was entered erroneously + //Error note is shown in CSecurityHandler::PassPhraseRequired() + break; + + case KErrAbort: + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::RemoteLockSetLockSettingL() - EMobilePhoneSetLockSetting request returned KErrAbort" ) ); + #endif // _DEBUG + break; + + default: + #ifdef _DEBUG + RDebug::Print( _L( "(SecUi)CSecuritySettings::RemoteLockSetLockSettingL() - EMobilePhoneSetLockSetting request returned: %d"), retValue ); + #endif // _DEBUG + break; + } + + #ifdef _DEBUG + RDebug::Print(_L("(SecUi)CSecuritySettings::RemoteLockSetLockSettingL() - Exit" ) ); + #endif // _DEBUG + + return retValue; + #else //! RD_REMOTELOCK + return KErrNotSupported; + #endif //RD_REMOTELOCK + } + + + +// +// ---------------------------------------------------------- +// CSecuritySettings::ChangeSimSecurityL() +// Changes SIM security +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::ChangeSimSecurityL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeSimSecurityL()")); + #endif + + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneToICC; + RMobilePhone::TMobilePhoneLockSetting lockChangeSetting; + CCoeEnv* coeEnv = CCoeEnv::Static(); + CDesCArrayFlat* items = coeEnv->ReadDesC16ArrayResourceL(R_SECURITY_LBX); + CleanupStack::PushL(items); + + //get lock info + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt status = iWait->WaitForRequestL(); + User::LeaveIfError(status); + TInt currentItem = 0; + + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeSimSecurityL()lockInfo: ELockSetDisabled")); + #endif + currentItem = 1; // off + } + + TInt oldItem = currentItem; + + CAknRadioButtonSettingPage* dlg = new (ELeave)CAknRadioButtonSettingPage(R_SECURITY_SETTING_PAGE, currentItem, items); + CleanupStack::PushL(dlg); + + + CleanupStack::Pop(); // dlg + if ( !(dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) || oldItem==currentItem ) + { + CleanupStack::PopAndDestroy(); // items + return EFalse; + } + + + + if (currentItem == 1) + { + lockChangeSetting = RMobilePhone::ELockSetDisabled; + } + else + { + lockChangeSetting = RMobilePhone::ELockSetEnabled; + } + + CleanupStack::PopAndDestroy(); // items + + iWait->SetRequestType(EMobilePhoneSetLockSetting); + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); + iPhone.SetLockSetting(iWait->iStatus,lockType,lockChangeSetting); + status = iWait->WaitForRequestL(); + + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangeSimSecurityL(): RETURN CODE: %d"), status); + #endif + switch(status) + { + case KErrNone: + { + break; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + return ChangeSimSecurityL(); + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + return ChangeSimSecurityL(); + } + case KErrAbort: + { + return EFalse; + } + default: + { + ShowErrorNoteL(status); + return ChangeSimSecurityL(); + } + } + + return ETrue; + } +// +// ---------------------------------------------------------- +// CSecuritySettings::ChangePinRequestL() +// Changes PIN1 request +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::ChangePinRequestL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL()")); + #endif + TInt simState; + TInt err( KErrGeneral ); + err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); + User::LeaveIfError( err ); + TBool simRemoved(simState == ESimNotPresent); + + if ( simRemoved ) + { + ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); + return EFalse;; + } + + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockICC; + + RMobilePhone::TMobilePhoneLockSetting lockChangeSetting; + + CCoeEnv* coeEnv = CCoeEnv::Static(); + CDesCArrayFlat* items = coeEnv->ReadDesC16ArrayResourceL(R_PIN_LBX); + CleanupStack::PushL(items); + + //get lock info + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt status = iWait->WaitForRequestL(); + User::LeaveIfError(status); + TInt currentItem = 0; + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL() GetLockInfo")); + #endif + + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL() lockInfo: ELockSetDisabled")); + #endif + currentItem = 1; // off + } + + TInt oldItem = currentItem; + + CAknRadioButtonSettingPage* dlg = new (ELeave)CAknRadioButtonSettingPage(R_PIN_SETTING_PAGE, currentItem, items); + CleanupStack::PushL(dlg); + + + CleanupStack::Pop(); // dlg + if ( !(dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) || oldItem==currentItem ) + { + CleanupStack::PopAndDestroy(); // items + return EFalse; + } + + + if (currentItem == 1) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL() currentItem: ELockSetDisabled")); + #endif + lockChangeSetting = RMobilePhone::ELockSetDisabled; + } + else + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL() currentItem: ELockSetEnabled")); + #endif + lockChangeSetting = RMobilePhone::ELockSetEnabled; + } + + CleanupStack::PopAndDestroy(); // items + + // Raise a flag to indicate that the PIN + // request coming from ETEL has originated from SecUi and not from Engine. + TInt tRet = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginated); + if ( tRet != KErrNone ) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL():\ + FAILED to set the SECUI query Flag: %d"), tRet); + #endif + } + // Change the lock setting + iWait->SetRequestType(EMobilePhoneSetLockSetting); + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); + iPhone.SetLockSetting(iWait->iStatus,lockType,lockChangeSetting); + status = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangePinRequestL(): RETURN CODE: %d"), status); + #endif + + // Lower the flag + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsETelAPIOriginated); + + switch(status) + { + case KErrNone: + { + break; + } + case KErrGsm0707OperationNotAllowed: + { + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return EFalse; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + return ChangePinRequestL(); + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + return ETrue; + } + case KErrAbort: + { + return EFalse; + } + default: + { + return ChangePinRequestL(); + } + } + + return ETrue; + } + +// +// ---------------------------------------------------------- +// CSecuritySettings::ChangeUPinRequestL() +// Changes UPIN request on/off +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::ChangeUPinRequestL() + { + TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + if(wcdmaSupported || upinSupported) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeUPinRequestL()")); + #endif + + TInt simState; + TInt err( KErrGeneral ); + err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); + User::LeaveIfError( err ); + TBool simRemoved(simState == ESimNotPresent); + + if ( simRemoved ) + { + ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); + return EFalse; + } + + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockUniversalPin; + + RMobilePhone::TMobilePhoneLockSetting lockChangeSetting = RMobilePhone::ELockSetDisabled; + + CCoeEnv* coeEnv = CCoeEnv::Static(); + CDesCArrayFlat* items = coeEnv->ReadDesC16ArrayResourceL(R_UPIN_LBX); + CleanupStack::PushL(items); + + //get lock info + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt status = iWait->WaitForRequestL(); + User::LeaveIfError(status); + TInt currentItem = 0; + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeUPinRequestL() GetLockInfo")); + #endif + + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangeUPinRequestL() lockInfo: ELockSetDisabled")); + #endif + currentItem = 1; // off + } + + TInt oldItem = currentItem; + + CAknRadioButtonSettingPage* dlg = new (ELeave)CAknRadioButtonSettingPage(R_UPIN_SETTING_PAGE, currentItem, items); + CleanupStack::PushL(dlg); + + + CleanupStack::Pop(); // dlg + if ( !(dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) || oldItem==currentItem ) + { + CleanupStack::PopAndDestroy(); // items + return EFalse; + } + + + if (currentItem == 1) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL() currentItem: ELockSetDisabled")); + #endif + lockChangeSetting = RMobilePhone::ELockSetDisabled; + } + else + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ChangePinRequestL() currentItem: ELockSetEnabled")); + #endif + lockChangeSetting = RMobilePhone::ELockSetEnabled; + } + + CleanupStack::PopAndDestroy(); // items + + // Raise a flag to indicate that the UPIN + // request coming from ETEL has originated from SecUi and not from Engine. + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginated); + // Change the lock setting + iWait->SetRequestType(EMobilePhoneSetLockSetting); + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); + iPhone.SetLockSetting(iWait->iStatus,lockType,lockChangeSetting); + status = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::ChangeUPinRequestL(): RETURN CODE: %d"), status); + #endif + + // Lower the flag + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsETelAPIOriginated); + + switch(status) + { + case KErrNone: + { + break; + } + case KErrGsm0707OperationNotAllowed: + { + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return EFalse; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + return ChangeUPinRequestL(); + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + return EFalse; + } + case KErrAbort: + { + return EFalse; + } + default: + { + ShowErrorNoteL(status); + return ChangeUPinRequestL(); + } + } + + return ETrue; + } + else + return EFalse; + + } + +// +// ---------------------------------------------------------- +// CSecuritySettings::SwitchPinCodesL() +// Changes the pin code currently in use (PIN/UPIN) +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::SwitchPinCodesL() + { + TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + if(wcdmaSupported || upinSupported) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL()")); + #endif + + // If we are in simless offline mode the PIN codes can't obviously be switched + TInt simState; + TInt err( KErrGeneral ); + err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); + User::LeaveIfError( err ); + TBool simRemoved(simState == ESimNotPresent); + + if ( simRemoved ) + { + ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); + return EFalse; + } + + + RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockUniversalPin; + RMobilePhone::TMobilePhoneLockSetting lockChangeSetting = RMobilePhone::ELockReplaced; + RMobilePhone::TMobilePhoneSecurityCode activeCode; + + iCustomPhone.GetActivePin(activeCode); + + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() GetLockInfo")); + #endif + iWait->SetRequestType(EMobilePhoneGetLockInfo); + + if (activeCode == RMobilePhone::ESecurityUniversalPin) + { + lockType = RMobilePhone::ELockUniversalPin; + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + User::LeaveIfError(res); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() Lock Info got: UPIN")); + #endif + } + else + { + lockType = RMobilePhone::ELockICC; + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + User::LeaveIfError(res); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() Lock Info got: PIN")); + #endif + } + + // code request must be ON to change active code. + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() CODE REQ NOT ON.")); + #endif + if (activeCode == RMobilePhone::ESecurityUniversalPin) + { + ShowResultNoteL(R_UPIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + } + else + { + ShowResultNoteL(R_PIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + } + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() CODE REQ NOT ON NOTE END.")); + #endif + return EFalse; + } + + + + CCoeEnv* coeEnv = CCoeEnv::Static(); + CDesCArrayFlat* items = coeEnv->ReadDesC16ArrayResourceL(R_CODE_LBX); + CleanupStack::PushL(items); + + iCustomPhone.GetActivePin(activeCode); + TInt currentItem = 0; + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() GetLockInfo")); + #endif + + if (activeCode == RMobilePhone::ESecurityUniversalPin) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() active code: UPIN")); + #endif + currentItem = 1; // UPIN + } + + TInt oldItem = currentItem; + + CAknRadioButtonSettingPage* dlg = new (ELeave)CAknRadioButtonSettingPage(R_CODE_IN_USE_SETTING_PAGE, currentItem, items); + CleanupStack::PushL(dlg); + + + CleanupStack::Pop(); // dlg + if ( !(dlg->ExecuteLD(CAknSettingPage::EUpdateWhenChanged)) || oldItem==currentItem ) + { + CleanupStack::PopAndDestroy(); // items + return EFalse; + } + + + if (currentItem == 1) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() currentItem: UPIN")); + #endif + lockType = RMobilePhone::ELockUniversalPin; + } + else + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SwitchPinCodesL() currentItem: PIN1")); + #endif + lockType = RMobilePhone::ELockICC; + } + + CleanupStack::PopAndDestroy(); // items + + // Raise a flag to indicate that the code + // request coming from ETEL has originated from SecUi and not from Engine. + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginated); + // Change the lock setting + iWait->SetRequestType(EMobilePhoneSetLockSetting); + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); + iPhone.SetLockSetting(iWait->iStatus,lockType,lockChangeSetting); + TInt status = iWait->WaitForRequestL(); + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::SwitchPinCodesL(): RETURN CODE: %d"), status); + #endif + // Lower the flag + RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsETelAPIOriginated); + + switch(status) + { + case KErrNone: + { + break; + } + case KErrGsm0707OperationNotAllowed: + { + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return EFalse; + } + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + { + // code was entered erroneously + return SwitchPinCodesL(); + } + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + { + return EFalse; + } + case KErrAbort: + { + return EFalse; + } + default: + { + ShowErrorNoteL(status); + return SwitchPinCodesL(); + } + } + + return ETrue; + } + else + return EFalse; + } + +// +// ---------------------------------------------------------- +// CSecuritySettings::IsLockEnabledL() +// Return is lock enabled/disabled +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::IsLockEnabledL(RMobilePhone::TMobilePhoneLock aLockType) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsLockEnabledL()")); + #endif + #ifdef __WINS__ + + return EFalse; + + #else //WINS + + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + + //get lock info + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, aLockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + + if (res != KErrNone) + return ETrue; + + //lock is enabled return true + if (lockInfo.iSetting == RMobilePhone::ELockSetEnabled) + { + return ETrue; + } + + // lock is disabled return false + return EFalse; + + #endif + + } +// +// ---------------------------------------------------------- +// CSecuritySettings::AskSecCodeL() +// For asking security code e.g in settings +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::AskSecCodeL() + { + return iSecurityHandler->AskSecCodeL(); + } +// +// ---------------------------------------------------------- +// CSecuritySettings::AskPin2L() +// Asks PIN2 +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::AskPin2L() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::AskPin2L()")); + #endif + TInt ret = 0; + // check if pin2 is blocked... + RMmCustomAPI::TSecurityCodeType secCodeType = RMmCustomAPI::ESecurityCodePin2; + RMobilePhone::TMobilePhoneSecurityCode etelsecCodeType(RMobilePhone::ESecurityCodePin2); + RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; + RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); + TBool isBlocked = EFalse; + //Check whether PIN2 is blocked + ret = iCustomPhone.IsBlocked(secCodeType,isBlocked); + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::AskPin2L() IsBlocked return value: %d"), ret); + #endif + if(isBlocked) + return EFalse; + + if (ret != KErrNone) + { + switch (ret) + { + // PIN2 Blocked. + case KErrGsm0707SIMPuk2Required: + break; + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + // Pin2 features blocked permanently! + ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone); + break; + case KErrGsm0707SimNotInserted: + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + break; + default: + ShowErrorNoteL(ret); + break; + } + return EFalse; + } + iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); + iPhone.GetSecurityCodeInfo(iWait->iStatus, etelsecCodeType, codeInfoPkg); + ret = iWait->WaitForRequestL(); + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): get PIN2 info result: %d"), ret); + TInt attempts(codeInfo.iRemainingEntryAttempts); + RDebug::Print(_L("(SECUI)CSecurityHandler::Pin2RequiredL(): attempts remaining: %d"), attempts); + #endif + User::LeaveIfError(ret); + + // ask pin2 code + RMobilePhone::TMobilePassword password; + CCodeQueryDialog* dlg = new (ELeave) CCodeQueryDialog (password,SEC_C_PIN_CODE_MIN_LENGTH,SEC_C_PIN_CODE_MAX_LENGTH,ESecUiNone); + if(codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) + ret = dlg->ExecuteLD(R_PIN2_QUERY); + else if(codeInfo.iRemainingEntryAttempts > KLastRemainingInputAttempt) + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_REMAINING_PIN2_ATTEMPTS, codeInfo.iRemainingEntryAttempts ); + ret = dlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + else + { + HBufC* queryPrompt = StringLoader::LoadLC(R_SECUI_FINAL_PIN2_ATTEMPT); + ret = dlg->ExecuteLD(R_PIN2_QUERY, *queryPrompt); + CleanupStack::PopAndDestroy(queryPrompt); + } + + if (!ret) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::AskPin2L(): Cancel pressed")); + #endif + return EFalse; + } + + // verify code + RMobilePhone::TMobilePassword required_fourth; + iWait->SetRequestType(EMobilePhoneVerifySecurityCode); + iPhone.VerifySecurityCode(iWait->iStatus,etelsecCodeType, password, required_fourth); + TInt res = iWait->WaitForRequestL(); + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::AskPin2L() VerifySecurityCode return value: %d"), res); + #endif + + switch(res) + { + case KErrNone: + break; + case KErrGsm0707IncorrectPassword: + case KErrAccessDenied: + // code was entered erroneously + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + return AskPin2L(); + case KErrGsm0707OperationNotAllowed: + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + return EFalse; + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + // code was blocked + ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); + return EFalse; + default: + ShowErrorNoteL(res); + return AskPin2L(); + } + + return ETrue; + } +// +// ---------------------------------------------------------- +// CSecuritySettings::SetFdnModeL() +// Activates or deactivates Fixed Dialling Numbers (FDN) mode. +// ---------------------------------------------------------- +// +EXPORT_C void CSecuritySettings::SetFdnModeL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::SetFdnModeL()")); + #endif + RMmCustomAPI::TSecurityCodeType secCodeType = RMmCustomAPI::ESecurityCodePin2; + + TBool isBlocked = EFalse; + TInt ret = iCustomPhone.IsBlocked(secCodeType,isBlocked); + + if(isBlocked) + return; + + if (ret != KErrNone) + { + switch (ret) + { + // PIN2 Blocked. + case KErrGsm0707SIMPuk2Required: + break; + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + // Pin2 features blocked permanently! + ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone); + break; + case KErrGsm0707SimNotInserted: + // not allowed with this sim + ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); + break; + default: + ShowErrorNoteL(ret); + break; + } + return; + } + + TInt status = KErrNone; RMobilePhone::TMobilePhoneFdnStatus fdnMode; RMobilePhone::TMobilePhoneFdnSetting fdnSet; - + iPhone.GetFdnStatus(fdnMode); - + if (fdnMode == RMobilePhone::EFdnActive) { fdnSet = RMobilePhone::EFdnSetOff; } else { - fdnSet = RMobilePhone::EFdnSetOn; + fdnSet = RMobilePhone::EFdnSetOn; } - RDEBUG("fdnSet", fdnSet); - // Change the FDN setting + + // Change the FDN setting iWait->SetRequestType(EMobilePhoneSetFdnSetting); RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG("SetFdnSetting", 0); iPhone.SetFdnSetting(iWait->iStatus, fdnSet); - RDEBUG("WaitForRequestL", 0); status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); -#ifdef __WINS__ - if (status == KErrNotSupported) - status = KErrNone; -#endif - RDEBUG("status", status); - switch (status) - { + #if defined(_DEBUG) + RDebug::Print( _L("(SECUI)CSecuritySettings::SetFdnModeL(): RETURN CODE: %d"), status); + #endif + switch(status) + { case KErrNone: break; case KErrGsm0707IncorrectPassword: @@ -1178,21 +2401,23 @@ default: ShowErrorNoteL(status); break; - } - } + } + } // // ---------------------------------------------------------- // CSecuritySettings::GetFndMode() // Retrieves the current Fixed Dialling Numbers mode // ---------------------------------------------------------- -// qtdone -EXPORT_C TInt CSecuritySettings::GetFdnMode(RMobilePhone::TMobilePhoneFdnStatus& aFdnMode) +// +EXPORT_C TInt CSecuritySettings::GetFdnMode (RMobilePhone::TMobilePhoneFdnStatus& aFdnMode) { /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - RDEBUG("0", 0); + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::GetFdnMode()")); + #endif return iPhone.GetFdnStatus(aFdnMode); } @@ -1201,12 +2426,24 @@ // CSecuritySettings::ShowErrorNoteL() // Shows error note // ---------------------------------------------------------- -// qtdone +// void CSecuritySettings::ShowErrorNoteL(TInt aError) { - RDEBUG("aError", aError); - - ShowResultNoteL(aError, CAknNoteDialog::EErrorTone); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ShowErrorNoteL()")); + #endif + // Let's create TextResolver instance for error resolving... + CTextResolver* textresolver = CTextResolver::NewLC(); + // Resolve the error + TPtrC errorstring; + errorstring.Set( textresolver->ResolveErrorString( aError ) ); + CAknNoteDialog* noteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,¬eDlg)); + noteDlg->PrepareLC(R_CODE_ERROR); + noteDlg->SetTextL((TDesC&)errorstring); + noteDlg->SetTimeout(CAknNoteDialog::ELongTimeout); + noteDlg->SetTone(CAknNoteDialog::EErrorTone); + noteDlg->RunLD(); + CleanupStack::PopAndDestroy(); // resolver } // @@ -1214,258 +2451,17 @@ // CSecuritySettings::ShowResultNoteL() // Shows result note // ---------------------------------------------------------- -// qtdone +// void CSecuritySettings::ShowResultNoteL(TInt aResourceID, CAknNoteDialog::TTone aTone) - { - RDEBUG("aResourceID", aResourceID); - - CHbDeviceMessageBoxSymbian* messageBox = CHbDeviceMessageBoxSymbian::NewL(CHbDeviceMessageBoxSymbian::EWarning); - CleanupStack::PushL(messageBox); - TInt satisfactoryIcon = 0; // might change later, in some scenarios - _LIT(KText, "ShowResultNoteL: "); - TBuf<0x200> title; - TBuf<0x200> titleTr; - title.Zero(); - titleTr.Zero(); - title.Append(KText); - title.AppendNum(aResourceID); - _LIT(KSeparator, " "); - title.Append(KSeparator); - switch (aResourceID) - { - case 0: - titleTr.Append(_L("OK")); - title.Append(_L("OK")); - satisfactoryIcon = 1; - break; - case KErrGsm0707IncorrectPassword: - titleTr.Append(_L("txt_pin_code_dpophead_wrong_pin_code")); // TODO this also happens for lock-code - title.Append(_L("Incorrect Password")); - break; - case KErrAccessDenied: - titleTr.Append(_L("txt_pin_code_dpopinfo_access_denied")); - title.Append(_L("Access Denied")); - break; - case KErrGsmSSPasswordAttemptsViolation: - titleTr.Append(_L("KErrGsmSSPasswordAttemptsViolation")); - title.Append(_L("Password Attempts Violation")); - break; - case KErrLocked: - titleTr.Append(_L("KErrLocked")); - title.Append(_L("Locked")); - break; - case KErrGsm0707OperationNotAllowed: - titleTr.Append(_L("KErrGsm0707OperationNotAllowed")); - title.Append(_L("Operation Not Allowed")); - break; - case KErrAbort: - titleTr.Append(_L("KErrAbort")); - title.Append(_L("Abort")); - break; - case KErrNotSupported: - titleTr.Append(_L("txt_pin_code_dpopinfo_operation_not_supported")); - title.Append(_L("Not Supported")); - break; - case R_SEC_BLOCKED: - titleTr.Append(_L("txt_pin_code_dpopinfo_security_blocked")); - title.Append(_L("BLOCKED")); - break; - case R_CODE_ERROR: - titleTr.Append(_L("R_CODE_ERROR")); - title.Append(_L("ERROR")); - break; - case KErrGsmInvalidParameter: - titleTr.Append(_L("txt_pin_code_dpopinfo_gsm_invalid_parameter")); - title.Append(_L("Invalid Parameter")); - break; - case R_CONFIRMATION_NOTE: - titleTr.Append(_L("R_CONFIRMATION_NOTE")); - title.Append(_L("CONFIRMED")); - satisfactoryIcon = 1; - break; - case R_CODES_DONT_MATCH: - titleTr.Append(_L("R_CODES_DONT_MATCH")); - title.Append(_L("CODES DONT MATCH")); - break; - case R_PIN_CODE_CHANGED_NOTE: - titleTr.Append(_L("txt_pin_code_dpopinfo_code_chaged")); // note the spelling mistake "chaged" - title.Append(_L("PIN CODE CHANGED")); - satisfactoryIcon = 1; - break; - case R_SECURITY_CODE_CHANGED_NOTE: - titleTr.Append(_L("R_SECURITY_CODE_CHANGED_NOTE")); - title.Append(_L("SECURITY CODE CHANGED")); - satisfactoryIcon = 1; - break; - case R_SECUI_TEXT_AUTOLOCK_MUST_BE_ACTIVE: - titleTr.Append(_L("txt_pin_code_dpopinfo_autolock_must_be_active")); - title.Append(_L("AUTOLOCK MUST BE ACTIVE")); - break; - case KErrServerTerminated: - titleTr.Append(_L("KErrServerTerminated")); - title.Append(_L("Server Terminated")); - break; - case KErrServerBusy: - titleTr.Append(_L("KErrServerBusy")); - title.Append(_L("Server Busy")); - break; - case R_PIN2_REJECTED: - titleTr.Append(_L("txt_pin_code_dpopinfo_pin2_rejected")); - title.Append(_L("PIN2 REJECTED")); - break; - case R_OPERATION_NOT_ALLOWED: - titleTr.Append(_L("R_OPERATION_NOT_ALLOWED")); - title.Append(_L("OPERATION NOT ALLOWED")); - break; - case R_UPIN_NOT_ALLOWED: - titleTr.Append(_L("txt_pin_code_dpopinfo_upin_not_allowed")); - title.Append(_L("UPIN NOT ALLOWED")); - break; - case R_PIN_NOT_ALLOWED: - titleTr.Append(_L("R_PIN_NOT_ALLOWED")); - title.Append(_L("PIN NOT ALLOWED")); - break; - case R_INSERT_SIM: - titleTr.Append(_L("txt_pin_code_dpopinfo_insert_sim")); - title.Append(_L("INSERT SIM")); - break; - case R_SIM_ON: - titleTr.Append(_L("R_SIM_ON")); - title.Append(_L("SIM ON")); - break; - case KErrTimedOut: - titleTr.Append(_L("KErrTimedOut")); - title.Append(_L("Timed Out")); - break; - case R_PIN2_CODE_CHANGED_NOTE: - titleTr.Append(_L("R_PIN2_CODE_CHANGED_NOTE")); - title.Append(_L("PIN2 CODE CHANGED")); - break; - case KErrArgument: - titleTr.Append(_L("KErrArgument")); - title.Append(_L("Error Argument")); - break; - case R_SIM_OFF: - titleTr.Append(_L("R_SIM_OFF")); - title.Append(_L("SIM OFF")); - break; - case R_SIM_ALLREADY_OFF: - titleTr.Append(_L("R_SIM_ALLREADY_OFF")); - title.Append(_L("SIM ALLREADY OFF")); - break; - case R_SIM_NOT_ALLOWED: - titleTr.Append(_L("R_SIM_NOT_ALLOWED")); - title.Append(_L("SIM NOT ALLOWED")); - break; - case R_REMOTELOCK_INVALID_CODE: - titleTr.Append(_L("R_REMOTELOCK_INVALID_CODE")); - title.Append(_L("REMOTELOCK INVALID CODE")); - break; - - case KErrTDevicelockPolicies+EDeviceLockAutolockperiod: - titleTr.Append(_L("EDeviceLockAutolockperiod")); - title.Append(_L("EDeviceLockAutolockperiod")); - break; - case KErrTDevicelockPolicies+EDeviceLockMaxAutolockPeriod: - titleTr.Append(_L("EDeviceLockMaxAutolockPeriod")); - title.Append(_L("EDeviceLockMaxAutolockPeriod")); - break; - case KErrTDevicelockPolicies+EDeviceLockMinlength: - titleTr.Append(_L("EDeviceLockMinlength")); - title.Append(_L("EDeviceLockMinlength")); - break; - case KErrTDevicelockPolicies+EDeviceLockMaxlength: - titleTr.Append(_L("EDeviceLockMaxlength")); - title.Append(_L("EDeviceLockMaxlength")); - break; - case KErrTDevicelockPolicies+EDeviceLockRequireUpperAndLower: - titleTr.Append(_L("EDeviceLockRequireUpperAndLower")); - title.Append(_L("EDeviceLockRequireUpperAndLower")); - break; - case KErrTDevicelockPolicies+EDeviceLockRequireCharsAndNumbers: - titleTr.Append(_L("EDeviceLockRequireCharsAndNumbers")); - title.Append(_L("EDeviceLockRequireCharsAndNumbers")); - break; - case KErrTDevicelockPolicies+EDeviceLockAllowedMaxRepeatedChars: - titleTr.Append(_L("EDeviceLockAllowedMaxRepeatedChars")); - title.Append(_L("EDeviceLockAllowedMaxRepeatedChars")); - break; - case KErrTDevicelockPolicies+EDeviceLockHistoryBuffer: - titleTr.Append(_L("EDeviceLockHistoryBuffer")); - title.Append(_L("EDeviceLockHistoryBuffer")); - break; - case KErrTDevicelockPolicies+EDeviceLockPasscodeExpiration: - titleTr.Append(_L("EDeviceLockPasscodeExpiration")); - title.Append(_L("EDeviceLockPasscodeExpiration")); - break; - case KErrTDevicelockPolicies+EDeviceLockMinChangeTolerance: - titleTr.Append(_L("EDeviceLockMinChangeTolerance")); - title.Append(_L("EDeviceLockMinChangeTolerance")); - break; - case KErrTDevicelockPolicies+EDeviceLockMinChangeInterval: - titleTr.Append(_L("EDeviceLockMinChangeInterval")); - title.Append(_L("EDeviceLockMinChangeInterval")); - break; - case KErrTDevicelockPolicies+EDeviceLockDisallowSpecificStrings: - titleTr.Append(_L("EDeviceLockDisallowSpecificStrings")); - title.Append(_L("EDeviceLockDisallowSpecificStrings")); - break; - case KErrTDevicelockPolicies+EDeviceLockAllowedMaxAtempts: - titleTr.Append(_L("EDeviceLockAllowedMaxAtempts")); - title.Append(_L("EDeviceLockAllowedMaxAtempts")); - break; - case KErrTDevicelockPolicies+EDeviceLockConsecutiveNumbers: - titleTr.Append(_L("EDeviceLockConsecutiveNumbers")); - title.Append(_L("EDeviceLockConsecutiveNumbers")); - break; - case KErrTDevicelockPolicies+EDeviceLockMinSpecialCharacters: - titleTr.Append(_L("EDeviceLockMinSpecialCharacters")); - title.Append(_L("EDeviceLockMinSpecialCharacters")); - break; - case KErrTDevicelockPolicies+EDeviceLockSingleCharRepeatNotAllowed: - titleTr.Append(_L("EDeviceLockSingleCharRepeatNotAllowed")); - title.Append(_L("EDeviceLockSingleCharRepeatNotAllowed")); - break; - case KErrTDevicelockPolicies+EDevicelockTotalPolicies: - titleTr.Append(_L("EDevicelockTotalPolicies")); - title.Append(_L("EDevicelockTotalPolicies")); - break; - - default: // " " - titleTr.Append(_L("Specific Error")); - title.Append(_L("Specific Error")); - break; - /* These ones are still unused */ - // txt_pin_code_dpopinfo_ln_attempts_remaining - // txt_pin_code_dpopinfo_emergency_calls_only - // txt_pin_code_dpopinfo_if_failed_be_ready_with_puk - } - - HBufC* stringHolder; - RDEBUG("titleTr", 1); - stringHolder = HbTextResolverSymbian::LoadLC(titleTr); // titleTr should I TRAP( err, ? - RDEBUG("got stringHolder", 1); - messageBox->SetTextL(stringHolder->Des()); // title - RDEBUG("aResourceID", aResourceID); - RDEBUGSTR(titleTr); - _LIT(KIconNameWondering, "qtg_small_smiley_wondering"); - _LIT(KIconNameSmile, "qtg_small_smiley_smile"); - if (satisfactoryIcon==1) - messageBox->SetIconNameL(KIconNameSmile); - else - messageBox->SetIconNameL(KIconNameWondering); - - if (aTone == CAknNoteDialog::EErrorTone) // another case is EConfirmationTone - { - messageBox->SetTimeout(messageBox->Timeout() * 2); // errors are displayed double time - } - // messageBox->ShowL(); - RDEBUG("calling ExecL", 0); - CHbDeviceMessageBoxSymbian::TButtonId selection = messageBox->ExecL(); // this guarantees that it waits for the dismiss/timeout - RDEBUG("called ExecL.selection", selection); - CleanupStack::PopAndDestroy(stringHolder); - CleanupStack::PopAndDestroy(); // messageBox - + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::ShowResultNoteL()")); + RDebug::Print(_L("(SECUI)CSecuritySettings::ShowResultNoteL() Resource ID: %d"), aResourceID); + #endif + CAknNoteDialog* noteDlg = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,¬eDlg)); + noteDlg->SetTimeout(CAknNoteDialog::ELongTimeout); + noteDlg->SetTone(aTone); + noteDlg->ExecuteLD(aResourceID); } // @@ -1473,1316 +2469,139 @@ // CSecuritySettings::IsUpinSupportedL() // Return is UPIN supported // ---------------------------------------------------------- -// qtdone +// EXPORT_C TBool CSecuritySettings::IsUpinSupportedL() - { - TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); - TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); - TBool isSupported = EFalse; - RDEBUG("wcdmaSupported", wcdmaSupported); - RDEBUG("upinSupported", upinSupported); - if (wcdmaSupported || upinSupported) - { +{ + TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + if(wcdmaSupported || upinSupported) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported() BEGIN")); + #endif + #ifdef __WINS__ + + return EFalse; + + #else //WINS + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - + //get lock info RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); iWait->SetRequestType(EMobilePhoneGetLockInfo); - RDEBUG("GetLockInfo", 0); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported() GetLockInfo")); + #endif iPhone.GetLockInfo(iWait->iStatus, RMobilePhone::ELockUniversalPin, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); TInt res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported() GetLockInfo DONE")); + #endif if ((res == KErrNotSupported) || (res == KErrGsmInvalidParameter)) - { - RDEBUG("0", 0); - isSupported = EFalse; - } - else - { - RDEBUG("1", 1); - isSupported = ETrue; - } - } - else - isSupported = EFalse; - RDEBUG("isSupported", isSupported); - return isSupported; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::IsUpinBlocked() -// Return is a code blocked -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::IsUpinBlocked() - { - TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); - TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); - if (wcdmaSupported || upinSupported) { - RMmCustomAPI::TSecurityCodeType secCodeType; - secCodeType = RMmCustomAPI::ESecurityUniversalPin; - TBool isBlocked = EFalse; - RDEBUG("IsBlocked", 0); - TInt ret = iCustomPhone.IsBlocked(secCodeType, isBlocked); - RDEBUG("ret", ret); - RDEBUG("isBlocked", isBlocked); - return isBlocked; + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported(): NOT SUPPORTED")); + #endif + return EFalse; } - else - return EFalse; - } -// -// ---------------------------------------------------------- -// CSecuritySettings::IsUpinActive() -// Return the code active in current application (PIN/UPIN) -// ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::IsUpinActive() - { - TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); - TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); - if (wcdmaSupported || upinSupported) - { - RMobilePhone::TMobilePhoneSecurityCode activePin; - RDEBUG("GetActivePin", 0); - iCustomPhone.GetActivePin(activePin); - RDEBUG("activePin", activePin); - RDEBUG("RMobilePhone::ESecurityUniversalPin", - RMobilePhone::ESecurityUniversalPin); - if (activePin == RMobilePhone::ESecurityUniversalPin) - { - return ETrue; - } - return EFalse; - } + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported(): SUPPORTED: %d"), res); + #endif + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported() END")); + #endif + return ETrue; + + #endif //WINS + } else return EFalse; - } - -/**************************/ -// qtdone -EXPORT_C TInt CSecuritySettings::ChangePinParamsL(RMobilePhone::TMobilePassword aOldPassword, RMobilePhone::TMobilePassword aNewPassword, TInt aFlags, TDes& aCaption, - TInt aShowError) - { - RDEBUG("aFlags", aFlags); - RDEBUG("aOldPassword", 0); - RDEBUGSTR(aOldPassword); - RDEBUG("aNewPassword", 0); - RDEBUGSTR(aNewPassword); - RDEBUG("aCaption", 0); - RDEBUGSTR(aCaption); - RDEBUG("aShowError", aShowError); - - /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - - TInt simState; - TInt err(KErrGeneral); - err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); - User::LeaveIfError(err); - TBool simRemoved(simState == ESimNotPresent); - - RDEBUG("simRemoved", simRemoved); - if (simRemoved) - { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return KErrAccessDenied; - } - RMobilePhone::TMobilePhoneSecurityCode secCodeType; - secCodeType = RMobilePhone::ESecurityCodePin1; - - RMobilePhone::TMobilePassword oldPassword; - RMobilePhone::TMobilePassword newPassword; - RMobilePhone::TMobilePhonePasswordChangeV1 passwords; - RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; - RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); - RMobilePhone::TMobilePassword required_fourth; - TInt queryAccepted = KErrCancel; - - RDEBUG("0", 0); - - RMobilePhone::TMobilePhoneLock lockType; - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - - lockType = RMobilePhone::ELockICC; - - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - RDEBUG("0", 0); - iWait->SetRequestType(EMobilePhoneGetLockInfo); - TInt res = KErrNone; - RDEBUG("GetLockInfo", 0); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrTimedOut) - { - lockInfo.iSetting = RMobilePhone::ELockSetEnabled; - res = KErrNone; - } -#endif - - User::LeaveIfError(res); - - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { - RDEBUG("RMobilePhone::ELockSetDisabled", - RMobilePhone::ELockSetDisabled); - ShowResultNoteL(R_PIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return KErrAccessDenied; - } - - RDEBUG("0", 0); - iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); - RDEBUG("GetSecurityCodeInfo", 0); - iPhone.GetSecurityCodeInfo(iWait->iStatus, secCodeType, codeInfoPkg); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported || res == KErrTimedOut) - { - res = KErrNone; - codeInfo.iRemainingEntryAttempts = KMaxNumberOfPINAttempts; - } -#endif - User::LeaveIfError(res); - - RDEBUG("codeInfo.iRemainingEntryAttempts", - codeInfo.iRemainingEntryAttempts); - if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) - codeInfo.iRemainingEntryAttempts = -1; - - RDEBUG("checking aOldPassword", 0); - if (aOldPassword.Length() == 0) - { - RDEBUG("asking aOldPassword", 0); - /* request PIN using QT */ - queryAccepted = KErrCancel; - CSecQueryUi *iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_pin_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("$")); - title.AppendNum(codeInfo.iRemainingEntryAttempts); - queryAccepted = iSecQueryUi->SecQueryDialog(title, oldPassword, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("oldPassword", 0); - RDEBUGSTR(oldPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - /* end request PIN using QT */ - - // verify it now, so that the user doesn't need to see the error _after_ typing the new ones - RDEBUG("VerifySecurityCode", 0); - iPhone.VerifySecurityCode(iWait->iStatus, secCodeType, oldPassword, required_fourth); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; -#endif - if (res != KErrNone) - { - ShowResultNoteL(res, CAknNoteDialog::EErrorTone); - return res; // not sure if it's wise to exit now. - } - - newPassword = _L(""); - } +} +// +// ---------------------------------------------------------- +// CSecuritySettings::IsCodeBlocked() +// Return is a code blocked +// ---------------------------------------------------------- +// +EXPORT_C TBool CSecuritySettings::IsUpinBlocked() +{ +TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + if(wcdmaSupported || upinSupported) + { + #ifdef __WINS__ + return EFalse; + #else//__WINS__ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinBlocked() BEGIN")); + #endif + RMmCustomAPI::TSecurityCodeType secCodeType; + secCodeType = RMmCustomAPI::ESecurityUniversalPin; + TBool isBlocked = EFalse; + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinBlocked() IsBlocked")); + #endif + TInt ret = iCustomPhone.IsBlocked(secCodeType,isBlocked); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinBlocked() DONE.RETURN: %d"), ret); + #endif + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinBlocked():isblocked: %d"), isBlocked); + #endif + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinBlocked() END")); + #endif + return isBlocked; + #endif //__WINS__ + } else - { - oldPassword.Copy(aOldPassword); - newPassword.Copy(aNewPassword); - } - - RDEBUG("res", res); - while (newPassword.Length() == 0) - { - // this is not needed because the dialog won't allow to close, unless codes match - // codes do not match -> note -> ask new pin and verification codes again - // if(newPassword.Length()>0) - // ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone); - - newPassword = _L(""); - - // new pin code query - if (aOldPassword.Length() == 0) // only if input parameters are empty - { - queryAccepted = KErrCancel; - CSecQueryUi *iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - // this queries both, and verifies itself - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_pin_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("|")); - HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_verify_new_pin_code")); - title.Append(stringHolder2->Des()); - CleanupStack::PopAndDestroy(stringHolder2); - queryAccepted = iSecQueryUi->SecQueryDialog(title, newPassword, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("newPassword", 1); - RDEBUGSTR(newPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - RDEBUG("0", 0); - } - } - - // send code - passwords.iOldPassword = oldPassword; - passwords.iNewPassword = newPassword; - RDEBUG("passwords", 0); - RDEBUGSTR(passwords.iOldPassword); - RDEBUGSTR(passwords.iNewPassword); - RDEBUG("SetRequestType", 0); - iWait->SetRequestType(EMobilePhoneChangeSecurityCode); - RDEBUG("ChangeSecurityCode", 0); - iPhone.ChangeSecurityCode(iWait->iStatus, secCodeType, passwords); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; -#endif - - switch (res) - { - case KErrNone: - { - // code changed - ShowResultNoteL(R_PIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); - break; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously. This is strange, because it was verified before - ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); - ChangePinParamsL(_L(""), _L(""), aFlags, aCaption, aShowError); - break; - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - // Pin1 blocked! - return KErrLocked; - } - case KErrGsm0707OperationNotAllowed: - { - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return KErrGsm0707OperationNotAllowed; - } - case KErrAbort: - { - break; - } - default: - { - ShowErrorNoteL(res); - ChangePinParamsL(_L(""), _L(""), aFlags, aCaption, aShowError); - break; - } - } - return res; - } -/*********************************************/ -// qtdone -EXPORT_C TInt CSecuritySettings::ChangeUPinParamsL(RMobilePhone::TMobilePassword aOldPassword, RMobilePhone::TMobilePassword aNewPassword, TInt aFlags, TDes& aCaption, - TInt aShowError) - { - RDEBUG("aFlags", aFlags); - // the password parameters are not used - if (aOldPassword.Length() > 0) - RDEBUGSTR(aOldPassword); - if (aNewPassword.Length() > 0) - RDEBUGSTR(aNewPassword); - - if (aCaption.Length() > 0) - RDEBUGSTR(aCaption); - - TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); - TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); - if (!(wcdmaSupported || upinSupported)) - { - RDEBUG("! upinSupported", upinSupported); - return KErrAccessDenied; - } - - RDEBUG("upinSupported", upinSupported); - TInt simState; - TInt err(KErrGeneral); - err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); - User::LeaveIfError(err); - TBool simRemoved(simState == ESimNotPresent); - - if (simRemoved) - { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return KErrAccessDenied; - } - - RMobilePhone::TMobilePhoneSecurityCode secCodeType; - secCodeType = RMobilePhone::ESecurityUniversalPin; - - RMobilePhone::TMobilePassword oldPassword; - RMobilePhone::TMobilePassword newPassword; - RMobilePhone::TMobilePassword verifcationPassword; - RMobilePhone::TMobilePhonePasswordChangeV1 passwords; - RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; - RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); - RMobilePhone::TMobilePhoneLock lockType; - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - TInt queryAccepted = KErrCancel; - - lockType = RMobilePhone::ELockUniversalPin; - - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - iWait->SetRequestType(EMobilePhoneGetLockInfo); - RDEBUG("GetLockInfo", 0); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - { - res = KErrNone; - lockInfo.iSetting = RMobilePhone::ELockSetEnabled; - } -#endif - User::LeaveIfError(res); - - RDEBUG("lockInfo.iSetting", lockInfo.iSetting); - RDEBUG("RMobilePhone::ELockSetDisabled", RMobilePhone::ELockSetDisabled); - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - { - ShowResultNoteL(R_UPIN_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return KErrAccessDenied; - } - - iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); - RDEBUG("GetSecurityCodeInfo", 0); - iPhone.GetSecurityCodeInfo(iWait->iStatus, secCodeType, codeInfoPkg); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported || res == KErrTimedOut) - { - res = KErrNone; - codeInfo.iRemainingEntryAttempts = KMaxNumberOfPINAttempts; - } -#endif - User::LeaveIfError(res); - - RDEBUG("codeInfo.iRemainingEntryAttempts", - codeInfo.iRemainingEntryAttempts); - if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) - codeInfo.iRemainingEntryAttempts = -1; - - queryAccepted = KErrCancel; - CSecQueryUi *iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_upin_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("$")); - title.AppendNum(codeInfo.iRemainingEntryAttempts); - queryAccepted = iSecQueryUi->SecQueryDialog(title, oldPassword, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("oldPassword", 0); - RDEBUGSTR(oldPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - res = KErrNone; // indicate that everything is ok - - { - queryAccepted = KErrCancel; - CSecQueryUi * iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - // this queries both, and verifies itself - TBuf<0x100> title; - title.Zero(); - - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_upin_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("|")); - HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_retype_upin_code")); - title.Append(stringHolder2->Des()); - CleanupStack::PopAndDestroy(stringHolder2); - queryAccepted = iSecQueryUi->SecQueryDialog(title, newPassword, SEC_C_PIN_CODE_MIN_LENGTH, SEC_C_PIN_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("newPassword", 0); - RDEBUGSTR(newPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - } - // send code - passwords.iOldPassword = oldPassword; - passwords.iNewPassword = newPassword; - iWait->SetRequestType(EMobilePhoneChangeSecurityCode); - RDEBUG("ChangeSecurityCode", 0); - iPhone.ChangeSecurityCode(iWait->iStatus, secCodeType, passwords); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; -#endif - switch (res) - { - case KErrNone: - { - // code changed - ShowResultNoteL(R_UPIN_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); - break; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously - ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); - ChangeUPinParamsL(_L(""), _L(""), aFlags, aCaption, aShowError); - break; - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - return KErrLocked; - } - case KErrGsm0707OperationNotAllowed: - { - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return KErrGsm0707OperationNotAllowed; - } - case KErrAbort: - { - break; - } - default: - { - ShowErrorNoteL(res); - ChangeUPinParamsL(_L(""), _L(""), aFlags, aCaption, aShowError); - break; - } - } - return res; - } -/***************************************/ -// qtdone -EXPORT_C TInt CSecuritySettings::ChangePin2ParamsL(RMobilePhone::TMobilePassword aOldPassword, RMobilePhone::TMobilePassword aNewPassword, TInt aFlags, TDes& aCaption, - TInt aShowError) - { - RDEBUG("aFlags", aFlags); - // the password parameters are not used - if (aOldPassword.Length() > 0) - RDEBUGSTR(aOldPassword); - if (aNewPassword.Length() > 0) - RDEBUGSTR(aNewPassword); - - if (aCaption.Length() > 0) - RDEBUGSTR(aCaption); - - TInt simState; - TInt err(KErrGeneral); - err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); - User::LeaveIfError(err); - TBool simRemoved(simState == ESimNotPresent); - - if (simRemoved) - { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return KErrAccessDenied; - } - - RMmCustomAPI::TSecurityCodeType secCodeType; - RMobilePhone::TMobilePhoneSecurityCode EtelsecCodeType; - secCodeType = RMmCustomAPI::ESecurityCodePin2; - RMobilePhone::TMobilePassword oldPassword; - RMobilePhone::TMobilePassword newPassword; - RMobilePhone::TMobilePassword verifcationPassword; - RMobilePhone::TMobilePhonePasswordChangeV1 passwords; - RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; - RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); - TInt queryAccepted = KErrCancel; - - // check if pin2 is blocked... - TBool isBlocked = EFalse; - - TInt ret = iCustomPhone.IsBlocked(secCodeType, isBlocked); - RDEBUG("isBlocked", isBlocked); - if (isBlocked) - return KErrAccessDenied; - RDEBUG("ret", ret); -#ifdef __WINS__ - if (ret == KErrNotSupported) - ret = KErrNone; -#endif - - if (ret != KErrNone) - { - switch (ret) - { - // PIN2 Blocked. - case KErrGsm0707SIMPuk2Required: - break; - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - // Pin2 features blocked permanently! - ShowResultNoteL(R_PIN2_REJECTED, CAknNoteDialog::EConfirmationTone); - break; - case KErrGsm0707SimNotInserted: - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - break; - default: - ShowErrorNoteL(ret); - break; - } - return KErrAccessDenied; - } - - // Security code must be changed to Etel API format - // Custom API Pin1 and Pin2 have the same enum values as the Etel ones - EtelsecCodeType = (RMobilePhone::TMobilePhoneSecurityCode) secCodeType; - iWait->SetRequestType(EMobilePhoneGetSecurityCodeInfo); - RDEBUG("GetSecurityCodeInfo", 0); - iPhone.GetSecurityCodeInfo(iWait->iStatus, EtelsecCodeType, codeInfoPkg); - RDEBUG("WaitForRequestL", 0); - ret = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL ret", ret); -#ifdef __WINS__ - if (ret == KErrNotSupported || ret == KErrTimedOut) - { - codeInfo.iRemainingEntryAttempts = 1; - ret = KErrNone; - } -#endif - User::LeaveIfError(ret); - - RDEBUG("codeInfo.iRemainingEntryAttempts", - codeInfo.iRemainingEntryAttempts); - if (codeInfo.iRemainingEntryAttempts == KMaxNumberOfPINAttempts) - codeInfo.iRemainingEntryAttempts = -1; - - /* request PIN using QT */ - queryAccepted = KErrCancel; - CSecQueryUi *iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_pin2_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("$")); - title.AppendNum(codeInfo.iRemainingEntryAttempts); - queryAccepted = iSecQueryUi->SecQueryDialog(title, oldPassword, SEC_C_PIN2_CODE_MIN_LENGTH, SEC_C_PIN2_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("oldPassword", 0); - RDEBUGSTR(oldPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - /* end request PIN using QT */ - - /* request PIN using QT */ - { - queryAccepted = KErrCancel; - CSecQueryUi * iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - // this queries both, and verifies itself - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_pin2_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("|")); - HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("Verify")); - title.Append(stringHolder2->Des()); - CleanupStack::PopAndDestroy(stringHolder2); - queryAccepted = iSecQueryUi->SecQueryDialog(title, newPassword, SEC_C_PIN2_CODE_MIN_LENGTH, SEC_C_PIN2_CODE_MAX_LENGTH, ESecUiAlphaNotSupported | ESecUiCancelSupported - | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("newPassword", 0); - RDEBUGSTR(newPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - } - /* end request PIN using QT */ - - passwords.iOldPassword = oldPassword; - passwords.iNewPassword = newPassword; - iWait->SetRequestType(EMobilePhoneChangeSecurityCode); - RDEBUG("ChangeSecurityCode", 0); - iPhone.ChangeSecurityCode(iWait->iStatus, EtelsecCodeType, passwords); - RDEBUG("WaitForRequestL", 0); - TInt res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; -#endif - switch (res) - { - case KErrNone: - { - // code changed - ShowResultNoteL(R_PIN2_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); - break; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); - ChangePin2ParamsL(_L(""), _L(""), aFlags, aCaption, aShowError); - break; - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - // Pin2 blocked! - ShowResultNoteL(KErrLocked, CAknNoteDialog::EErrorTone); - CSecurityHandler* handler = new (ELeave) CSecurityHandler(iPhone); - CleanupStack::PushL(handler); - handler->HandleEventL(RMobilePhone::EPuk2Required); - CleanupStack::PopAndDestroy(handler); // handler - return KErrLocked; - } - case KErrGsm0707OperationNotAllowed: - { - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return KErrGsm0707OperationNotAllowed; - } - case KErrAbort: - { - break; - } - default: - { - ShowErrorNoteL(res); - ChangePin2ParamsL(_L(""), _L(""), aFlags, aCaption, aShowError); - break; - } - } - return res; - } -/************************************************/ -// qtdone -EXPORT_C TInt CSecuritySettings::ChangeSecCodeParamsL(RMobilePhone::TMobilePassword aOldPassword, RMobilePhone::TMobilePassword aNewPassword, TInt aFlags, TDes& aCaption, - TInt aShowError) - { - RDEBUG("aFlags", aFlags); - RDEBUG("aShowError", aShowError); - /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - TInt res = KErrNone; - TInt queryAccepted = KErrCancel; - RMobilePhone::TMobilePassword newPassword; - - RMobilePhone::TMobilePhoneSecurityCode secCodeType; - secCodeType = RMobilePhone::ESecurityCodePhonePassword; - RMobilePhone::TMobilePassword oldPassword; - RMobilePhone::TMobilePassword required_fourth; - RMobilePhone::TMobilePhonePasswordChangeV1 passwords; - - // confirm that it can be changed now - { - RArray aFailedPolicies; - TDevicelockPolicies failedPolicy; - TInt retLockcode = KErrNone; - RSCPClient scpClient; - retLockcode = scpClient.Connect(); - RDEBUG( "retLockcode", retLockcode ); - if(retLockcode == KErrNone ) - { - RDEBUG( "scpClient.VerifyNewLockcodeAgainstPolicies", 0 ); - retLockcode = scpClient.IsLockcodeChangeAllowedNow( aFailedPolicies ); - RDEBUG( "retLockcode", retLockcode ); - RDEBUG( "aFailedPolicies.Count()", aFailedPolicies.Count() ); - res = retLockcode; - for(TInt i=0; i title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_sec_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - queryAccepted = iSecQueryUi->SecQueryDialog(title, oldPassword, SEC_C_SECURITY_CODE_MIN_LENGTH, SEC_C_SECURITY_CODE_MAX_LENGTH, ESecUiAlphaSupported - | ESecUiCancelSupported | ESecUiEmergencyNotSupported | secCodeType); - RDEBUG("oldPassword", 0); - RDEBUGSTR(oldPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - newPassword = _L(""); - } - else - { - RDEBUG("parameter includes oldPassword", 1); - oldPassword.Copy(aOldPassword); - newPassword.Copy(aNewPassword); - } - - // check current code before proceeding - RDEBUG("EMobilePhoneVerifySecurityCode", EMobilePhoneVerifySecurityCode); - iWait->SetRequestType(EMobilePhoneVerifySecurityCode); // 0x59F1 - RDEBUG("VerifySecurityCode", 0); - iPhone.VerifySecurityCode(iWait->iStatus, secCodeType, oldPassword, required_fourth); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; -#endif - - if (res != KErrNone) - { - ShowResultNoteL(res, CAknNoteDialog::EErrorTone); - return res; - } - - while (newPassword.Length() == 0) - { - // codes do not match -> note -> ask new pin and verification codes again - // note that this never happens because the dialog doesn't dismiss until both codes match - if (newPassword.Length() > 0) - ShowResultNoteL(R_CODES_DONT_MATCH, CAknNoteDialog::EErrorTone); - - { - queryAccepted = KErrCancel; - CSecQueryUi *iSecQueryUi; - iSecQueryUi = CSecQueryUi::NewL(); - // will ask both codes and compare itself - // mix, max , alpha is handled using TARM params, in the dialog itself - TInt lType = ESecUiAlphaSupported | ESecUiCancelSupported | ESecUiEmergencyNotSupported | secCodeType; - RDEBUG("lType", lType); - TBuf<0x100> title; - title.Zero(); - HBufC* stringHolder = HbTextResolverSymbian::LoadLC(_L("txt_pin_code_dialog_new_sec_code")); - title.Append(stringHolder->Des()); - CleanupStack::PopAndDestroy(stringHolder); - title.Append(_L("|")); - HBufC* stringHolder2 = HbTextResolverSymbian::LoadLC(_L("Verify")); - title.Append(stringHolder2->Des()); - CleanupStack::PopAndDestroy(stringHolder2); - queryAccepted = iSecQueryUi->SecQueryDialog(title, newPassword, SEC_C_SECURITY_CODE_MIN_LENGTH, SEC_C_SECURITY_CODE_MAX_LENGTH, lType); - RDEBUG("newPassword", 0); - RDEBUGSTR(newPassword); - RDEBUG("queryAccepted", queryAccepted); - delete iSecQueryUi; - if (queryAccepted != KErrNone) - return KErrAbort; - } - - } // while - - // Confirm that the new code is nice. - // This is also done on every key-press in the dialog, but it doesn't harm to repeat. - // In fact this is needed for the case when newPassword is provided. - RArray aFailedPolicies; - TDevicelockPolicies failedPolicy; - TInt retLockcode = KErrNone; - RSCPClient scpClient; - retLockcode = scpClient.Connect(); - RDEBUG( "retLockcode", retLockcode ); - if(retLockcode == KErrNone ) - { - RDEBUG( "scpClient.VerifyNewLockcodeAgainstPolicies", 0 ); - retLockcode = scpClient.VerifyNewLockcodeAgainstPolicies( newPassword, aFailedPolicies ); - RDEBUG( "retLockcode", retLockcode ); - RDEBUG( "aFailedPolicies.Count()", aFailedPolicies.Count() ); - for(TInt i=0; iSetRequestType(EMobilePhoneChangeSecurityCode); - RDEBUG("ChangeSecurityCode", 0); - iPhone.ChangeSecurityCode(iWait->iStatus, secCodeType, passwords); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; -#endif - - if (res == KErrNone && 1 == 0) // TODO not possible to enable because it asks code again - { - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; - RMobilePhone::TMobilePhoneLockSetting lockChangeSetting = RMobilePhone::ELockSetEnabled; - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RDEBUG("SetLockSetting", 0); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockChangeSetting); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL res", res); -#ifdef __WINS__ - if (res == KErrNotSupported || res == KErrTimedOut) - res = KErrNone; -#endif - } - } - - RDEBUG("res", res); - switch (res) - { - case KErrNone: - { - // code changed ... unless TARM rejects it - { - // Send the changed code to the SCP server, even with device lock enhancements. - RDEBUG("scpClient.Connect", 0); - RSCPClient scpClient; - TSCPSecCode newScpCode; - TSCPSecCode oldScpCode; - newScpCode.Copy(newPassword); - oldScpCode.Copy(oldPassword); - if (scpClient.Connect() == KErrNone) - { - RDEBUG("scpClient.StoreLockcode", 0); - // this is the old method. Obsolete now - // scpClient.StoreCode( newCode ); - RArray aFailedPolicies; - TDevicelockPolicies failedPolicy; - TInt retLockcode = KErrNone; - retLockcode = scpClient.StoreLockcode(newScpCode, oldScpCode, aFailedPolicies); - RDEBUG( "retLockcode", retLockcode ); - RDEBUG( "KErrAccessDenied", KErrAccessDenied ); - RDEBUG( "aFailedPolicies.Count()", aFailedPolicies.Count() ); - for (TInt i = 0; i < aFailedPolicies.Count(); i++) - { - failedPolicy = aFailedPolicies[i]; - RDEBUG( "failedPolicy", failedPolicy ); - } - // Don't know what to do if TARM fails. Hopefully it was stopped at typing, as well as VerifyNewLockcodeAgainstPolicies - // The code is already changed in iPhone ! - // For now, just undo the changed password - if(retLockcode!=KErrNone) - { - RDEBUG("Undo password change because retLockcode", retLockcode); - ShowResultNoteL(retLockcode, CAknNoteDialog::EConfirmationTone); - - // go back to previous password. - passwords.iOldPassword = newPassword; - passwords.iNewPassword = oldPassword; - iWait->SetRequestType(EMobilePhoneChangeSecurityCode); - RDEBUG("ChangeSecurityCode", 0); - iPhone.ChangeSecurityCode(iWait->iStatus, secCodeType, passwords); - RDEBUG("WaitForRequestL", 0); - res = iWait->WaitForRequestL(); // this can't fail. ISA is always allowing to undo the password change. - RDEBUG("WaitForRequestL res", res); - #ifdef __WINS__ - if (res == KErrNotSupported) - res = KErrNone; - #endif - res = retLockcode; - } - scpClient.Close(); - } - if(res==KErrNone) - { - RDEBUG( "showing R_SECURITY_CODE_CHANGED_NOTE", R_SECURITY_CODE_CHANGED_NOTE ); - ShowResultNoteL(R_SECURITY_CODE_CHANGED_NOTE, CAknNoteDialog::EConfirmationTone); - } - } - break; - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - ShowResultNoteL(R_SEC_BLOCKED, CAknNoteDialog::EErrorTone); - ChangeSecCodeParamsL(aOldPassword, aNewPassword, aFlags, aCaption, aShowError); - break; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously - ShowResultNoteL(R_CODE_ERROR, CAknNoteDialog::EErrorTone); - ChangeSecCodeParamsL(aOldPassword, aNewPassword, aFlags, aCaption, aShowError); - break; - } - case KErrAbort: - { - break; - } - default: - { - ShowErrorNoteL(res); - ChangeSecCodeParamsL(aOldPassword, aNewPassword, aFlags, aCaption, aShowError); - break; - } - } // switch - RDEBUG("return res", res); - return res; - } - -/**************************************/ -// qtdone -// the params are changed in the settings,. This only asks for password. -EXPORT_C TInt CSecuritySettings::ChangeAutoLockPeriodParamsL(TInt aPeriod, RMobilePhone::TMobilePassword aOldPassword, TInt aFlags, TDes& aCaption, TInt aShowError) - { - RDEBUG("aPeriod", aPeriod); - RDEBUG("aFlags", aFlags); - /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - - RMobilePhone::TMobilePhoneLockSetting lockChange(RMobilePhone::ELockSetDisabled); - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockPhoneDevice; - TInt oldPeriod = aPeriod; - - TInt maxPeriod = 0; - if (FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw)) - { - // Retrieve the current autolock period max. value from the SCP server, - // and check that the value the user - // selected is ok from the Corporate Policy point of view. - RSCPClient scpClient; - TInt ret = scpClient.Connect(); - if (ret == KErrNone) - { - CleanupClosePushL(scpClient); - TBuf maxPeriodBuf; - if (scpClient.GetParamValue(ESCPMaxAutolockPeriod, maxPeriodBuf) == KErrNone) - { - TLex lex(maxPeriodBuf); - if ((lex.Val(maxPeriod) == KErrNone) && (maxPeriod > 0)) - { - RDEBUG("from SCP maxPeriod", maxPeriod); - } - else - { - maxPeriod = 0; - RDEBUG("not from SCP maxPeriod", maxPeriod); - } - } - else - { - RDEBUG("Failed to retrieve max period", maxPeriod); - } - } - else - { - RDEBUG("Failed to connect to SCP", 0); - } - CleanupStack::PopAndDestroy(); // scpClient - } - RDEBUG("maxPeriod", maxPeriod); - if (FeatureManager::FeatureSupported(KFeatureIdSapTerminalControlFw)) - { - TBool allow = ETrue; - - if ((aPeriod == 0) && (maxPeriod > 0)) - { - RDEBUG("The period is not allowed by TARM", aPeriod); - RDEBUG( "maxPeriod", maxPeriod ); - allow = EFalse; - ShowResultNoteL(R_SECUI_TEXT_AUTOLOCK_MUST_BE_ACTIVE, CAknNoteDialog::EErrorTone); - } - if (!allow) - { - return ChangeAutoLockPeriodParamsL(aPeriod, aOldPassword, aFlags, aCaption, aShowError); // ask again - } - } - - if (aPeriod == 0) - { - // If remote lock is enabled, don't disable the domestic OS device lock - // since that would render the RemoteLock useless. - // Instead just re-set the DOS lock to enabled which as a side effect - // requests the security code from the user. - - TBool remoteLockStatus(EFalse); - CRemoteLockSettings* remoteLockSettings = CRemoteLockSettings::NewL(); - - if (remoteLockSettings->GetEnabled(remoteLockStatus)) - { - if (remoteLockStatus) - { - // Remote lock is enabled - lockChange = RMobilePhone::ELockSetEnabled; - RDEBUG( "RemoteLock is enabled lockChange", lockChange ); - } - else - { - // Remote lock is disabled - lockChange = RMobilePhone::ELockSetDisabled; - RDEBUG( "RemoteLock is disabled lockChange", lockChange ); - } - } - else - { - // Failed to get remote lock status - RDEBUG( "Failed to get remote lock status lockChange", lockChange ); - } - - delete remoteLockSettings; - remoteLockSettings = NULL; - - } - else - { - lockChange = RMobilePhone::ELockSetEnabled; - RDEBUG("aPeriod != 0 lockChange", lockChange); - } - - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RDEBUG("lockChange", lockChange); - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG("SetLockSetting", 0); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockChange); // this eventually calls PassPhraseRequiredL - RDEBUG("WaitForRequestL", 0); - TInt status = KErrNone; - status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - status = KErrNone; -#endif - switch (status) - { - case KErrNone: - break; - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - RDEBUG("KErrLocked", KErrLocked) - ; - ShowResultNoteL(KErrLocked, CAknNoteDialog::EErrorTone); // the old code didn't show messages - return ChangeAutoLockPeriodParamsL(oldPeriod, aOldPassword, aFlags, aCaption, aShowError); // ask again - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - RDEBUG("KErrAccessDenied", KErrAccessDenied) - ; - // code was entered erroneously - ShowResultNoteL(KErrAccessDenied, CAknNoteDialog::EErrorTone); // the old code didn't show messages - return ChangeAutoLockPeriodParamsL(oldPeriod, aOldPassword, aFlags, aCaption, aShowError); // ask again - case KErrAbort: - // User pressed "cancel" in the code query dialog. - return oldPeriod; - default: - RDEBUG("default", status) - ; - ShowResultNoteL(status, CAknNoteDialog::EErrorTone); // the old code didn't show messages - return ChangeAutoLockPeriodParamsL(oldPeriod, aOldPassword, aFlags, aCaption, aShowError); // ask again - } - RDEBUG("aPeriod", aPeriod); - return aPeriod; - } -/*****************************/ -// qtdone -EXPORT_C TInt CSecuritySettings::ChangePinRequestParamsL(TInt aEnable, RMobilePhone::TMobilePassword aOldPassword, TInt aFlags, TDes& aCaption, TInt aShowError) - { - RDEBUG("aEnable", aEnable); - RDEBUG("aFlags", aFlags); - TInt simState = 0; - TInt lEnable = aEnable; - TInt err(KErrGeneral); - err = RProperty::Get(KPSUidStartup, KPSSimStatus, simState); - User::LeaveIfError(err); - TBool simRemoved(simState == ESimNotPresent); - - if (simRemoved) - { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return KErrAccessDenied; - } - - RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); - RMobilePhone::TMobilePhoneLock lockType = RMobilePhone::ELockICC; - - RMobilePhone::TMobilePhoneLockSetting lockChangeSetting; - - //get lock info - iWait->SetRequestType(EMobilePhoneGetLockInfo); - iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); - RDEBUG("WaitForRequestL", 0); - TInt status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - { - lockInfo.iSetting = RMobilePhone::ELockSetDisabled; - status = KErrNone; - } -#endif - User::LeaveIfError(status); - - if (aOldPassword.Length() == 0) // only if input parameters are empty - { - // switch the value. - if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) - lEnable = 1; // on - else - lEnable = 0; // off - } - - RDEBUG("lEnable", lEnable); - if (lEnable == 0) - { - lockChangeSetting = RMobilePhone::ELockSetDisabled; - } - else - { - lockChangeSetting = RMobilePhone::ELockSetEnabled; - } - - RDEBUG("lockChangeSetting", lockChangeSetting); - // Raise a flag to indicate that the PIN - // request coming from ETEL has originated from SecUi and not from Engine. - TInt tRet = RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginated); - RDEBUG("tRet", tRet); - - // Change the lock setting - iWait->SetRequestType(EMobilePhoneSetLockSetting); - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsQueryRequestCancel, ESecurityUIsQueryRequestOk); - RDEBUG("SetLockSetting", 0); - iPhone.SetLockSetting(iWait->iStatus, lockType, lockChangeSetting); // this will trigger Pin1RequiredL - RDEBUG("WaitForRequestL", 0); - status = iWait->WaitForRequestL(); - RDEBUG("WaitForRequestL status", status); -#ifdef __WINS__ - if (status == KErrNotSupported || status == KErrTimedOut) - status = KErrNone; -#endif - - // Lower the flag - RProperty::Set(KPSUidSecurityUIs, KSecurityUIsSecUIOriginatedQuery, ESecurityUIsSecUIOriginatedUninitialized); - - switch (status) - { - case KErrNone: - { - break; - } - case KErrGsm0707OperationNotAllowed: - { - // not allowed with this sim - ShowResultNoteL(R_OPERATION_NOT_ALLOWED, CAknNoteDialog::EErrorTone); - return KErrGsm0707OperationNotAllowed; - } - case KErrGsm0707IncorrectPassword: - case KErrAccessDenied: - { - // code was entered erroneously - return ChangePinRequestParamsL(aEnable, aOldPassword, aFlags, aCaption, aShowError); - } - case KErrGsmSSPasswordAttemptsViolation: - case KErrLocked: - { - return KErrLocked; - } - case KErrAbort: - { - return KErrAbort; - } - default: - { - return ChangePinRequestParamsL(aEnable, aOldPassword, aFlags, aCaption, aShowError); - } - } - return KErrNone; - } - + return EFalse; +} // // ---------------------------------------------------------- -// CSecuritySettings::AskSecCodeParamsL() -// For asking security code e.g in settings -// not used +// CSecuritySettings::GetActivePinCode() +// Return the code active in current application (PIN/UPIN) // ---------------------------------------------------------- -// qtdone -EXPORT_C TBool CSecuritySettings::AskSecCodeParamsL(RMobilePhone::TMobilePassword &aOldPassword, TInt aFlags, TDes& aCaption, TInt aShowError) - { - RDEBUG("aFlags", aFlags); - RDEBUG("aShowError", aShowError); - RDEBUG("This doesn't do anything", 0); - RDEBUG("aFlags", aFlags); - - // the password parameters are not used - if (aOldPassword.Length() > 0) - RDEBUGSTR(aOldPassword); - - return EFalse; - } +// +EXPORT_C TBool CSecuritySettings::IsUpinActive() +{ + TBool wcdmaSupported(FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma )); + TBool upinSupported(FeatureManager::FeatureSupported( KFeatureIdUpin )); + if(wcdmaSupported || upinSupported) + { + #ifdef __WINS__ + return EFalse; + #else//__WINS__ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinActive() BEGIN")); + #endif + RMobilePhone::TMobilePhoneSecurityCode activePin; + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinActive() GetActivePin")); + #endif + iCustomPhone.GetActivePin(activePin); + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinActive() GetActivePin DONE")); + #endif + if(activePin == RMobilePhone::ESecurityUniversalPin) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinActive(): UPIN ACTIVE")); + #endif + return ETrue; + } + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinActive(): UPIN NOT ACTIVE")); + #endif + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinActive(): END")); + #endif + return EFalse; + #endif //__WINS__ + } + else + return EFalse; +} // End of file