diff -r 63339781d179 -r 09b1ac925e3f securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp --- a/securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp Thu Aug 19 10:45:23 2010 +0300 +++ b/securitydialogs/SecUi/Src/SecUiSecuritySettings.cpp Tue Aug 31 16:04:40 2010 +0300 @@ -1,26 +1,24 @@ /* -* 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 @@ -31,39 +29,42 @@ #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" - -#ifdef RD_REMOTELOCK +#include #include #include #include -#include "SecUiRemoteLockSettingPage.h" -#endif // RD_REMOTELOCK #include - /***************************************************** - * Series 60 Customer / TSY - * Needs customer TSY implementation - *****************************************************/ + +#include "SecQueryUi.h" +#include + +/***************************************************** + * 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); -const TInt KLastRemainingInputAttempt(1); +const TInt KMaxNumberOfPINAttempts(3); // is this valid also for PIN2 ? + +#define ESecUiTypeLock 0x00100000 +#define KErrTDevicelockPolicies 0x10207837 // ================= MEMBER FUNCTIONS ======================= // // ---------------------------------------------------------- // CSecuritySettings::NewL() // ---------------------------------------------------------- -// +// qtdone EXPORT_C CSecuritySettings* CSecuritySettings::NewL() { CSecuritySettings* self = new (ELeave) CSecuritySettings(); @@ -77,7 +78,7 @@ // CSecuritySettings::CSecuritySettings() // constructor // ---------------------------------------------------------- -// +// qtdone EXPORT_C CSecuritySettings::CSecuritySettings() { } @@ -86,91 +87,93 @@ // 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 + *****************************************************/ - TInt err( KErrGeneral ); - TInt thisTry( 0 ); + RDEBUG("0", 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 */ - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CSecuritySettings::ConstructL()")); - #endif - + fails on connections are possible, at least on some servers */ + 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 ); + 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); + } // // ---------------------------------------------------------- // 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()) - { - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CManualSecuritySettings::~CSecuritySettings() CANCEL REQ")); - #endif + if (iWait->IsActive()) + { + RDEBUG("CancelAsyncRequest", 0); 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(); @@ -191,173 +194,21 @@ // CSecuritySettings::ChangePinL() // Changes PIN1 // ---------------------------------------------------------- -// +// qtdone EXPORT_C void CSecuritySettings::ChangePinL() { - /***************************************************** - * 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); + RDEBUG("0", 0); + RMobilePhone::TMobilePassword iOldPassword; + RMobilePhone::TMobilePassword iNewPassword; + TInt iFlags = ESecUiTypeLock; + iOldPassword.Copy(_L("")); + iNewPassword.Copy(_L("")); - 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; - } - } - + 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); } // @@ -365,174 +216,21 @@ // CSecuritySettings::ChangeUPinL() // Changes Universal PIN // ---------------------------------------------------------- -// +// qtdone EXPORT_C void CSecuritySettings::ChangeUPinL() { - 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; - } - } - } + 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); } @@ -541,48 +239,873 @@ // 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); + } // -EXPORT_C void CSecuritySettings::ChangePin2L() +// ---------------------------------------------------------- +// 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 + + // 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) + { + // 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 - *****************************************************/ - #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); + * 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 ( simRemoved ) + if (currentItem == 0) // switch the flag + { + lockChangeSetting = RMobilePhone::ELockSetDisabled; + } + else { - ShowResultNoteL(R_INSERT_SIM, CAknNoteDialog::EErrorTone); - return; + 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(); + } } - RMmCustomAPI::TSecurityCodeType secCodeType; - RMobilePhone::TMobilePhoneSecurityCode EtelsecCodeType; - secCodeType = RMmCustomAPI::ESecurityCodePin2; - RMobilePhone::TMobilePassword oldPassword; - RMobilePhone::TMobilePassword newPassword; - RMobilePhone::TMobilePassword verifcationPassword; - RMobilePhone::TMobilePhonePasswordChangeV1 passwords; + 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); RMobilePhone::TMobilePhoneSecurityCodeInfoV5 codeInfo; RMobilePhone::TMobilePhoneSecurityCodeInfoV5Pckg codeInfoPkg(codeInfo); - - // check if pin2 is blocked... + RMobilePhone::TMobilePassword password; 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; - TInt ret = iCustomPhone.IsBlocked(secCodeType,isBlocked); - - if(isBlocked) + // 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) return; - + if (ret != KErrNone) - { + { switch (ret) { // PIN2 Blocked. @@ -603,1785 +1126,39 @@ } 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; } - - // Change the FDN setting + RDEBUG("fdnSet", fdnSet); + // 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 - #if defined(_DEBUG) - RDebug::Print( _L("(SECUI)CSecuritySettings::SetFdnModeL(): RETURN CODE: %d"), status); - #endif - switch(status) - { + RDEBUG("status", status); + switch (status) + { case KErrNone: break; case KErrGsm0707IncorrectPassword: @@ -2401,23 +1178,21 @@ default: ShowErrorNoteL(status); break; - } - } + } + } // // ---------------------------------------------------------- // CSecuritySettings::GetFndMode() // Retrieves the current Fixed Dialling Numbers mode // ---------------------------------------------------------- -// -EXPORT_C TInt CSecuritySettings::GetFdnMode (RMobilePhone::TMobilePhoneFdnStatus& aFdnMode) +// qtdone +EXPORT_C TInt CSecuritySettings::GetFdnMode(RMobilePhone::TMobilePhoneFdnStatus& aFdnMode) { /***************************************************** - * Series 60 Customer / ETel - * Series 60 ETel API - *****************************************************/ - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CSecuritySettings::GetFdnMode()")); - #endif + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + RDEBUG("0", 0); return iPhone.GetFdnStatus(aFdnMode); } @@ -2426,24 +1201,12 @@ // CSecuritySettings::ShowErrorNoteL() // Shows error note // ---------------------------------------------------------- -// +// qtdone void CSecuritySettings::ShowErrorNoteL(TInt aError) { - #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 + RDEBUG("aError", aError); + + ShowResultNoteL(aError, CAknNoteDialog::EErrorTone); } // @@ -2451,17 +1214,258 @@ // CSecuritySettings::ShowResultNoteL() // Shows result note // ---------------------------------------------------------- -// +// qtdone void CSecuritySettings::ShowResultNoteL(TInt aResourceID, CAknNoteDialog::TTone aTone) - { - #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); + { + 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 + } // @@ -2469,139 +1473,1316 @@ // CSecuritySettings::IsUpinSupportedL() // Return is UPIN supported // ---------------------------------------------------------- -// +// qtdone EXPORT_C TBool CSecuritySettings::IsUpinSupportedL() -{ - 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 - + { + TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); + TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); + TBool isSupported = EFalse; + RDEBUG("wcdmaSupported", wcdmaSupported); + RDEBUG("upinSupported", upinSupported); + if (wcdmaSupported || upinSupported) + { RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; - + //get lock info RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); iWait->SetRequestType(EMobilePhoneGetLockInfo); - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported() GetLockInfo")); - #endif + RDEBUG("GetLockInfo", 0); iPhone.GetLockInfo(iWait->iStatus, RMobilePhone::ELockUniversalPin, lockInfoPkg); + RDEBUG("WaitForRequestL", 0); TInt res = iWait->WaitForRequestL(); - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported() GetLockInfo DONE")); - #endif + RDEBUG("WaitForRequestL res", res); if ((res == KErrNotSupported) || (res == KErrGsmInvalidParameter)) - { - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinSupported(): NOT SUPPORTED")); - #endif - return EFalse; + { + RDEBUG("0", 0); + isSupported = EFalse; + } + else + { + RDEBUG("1", 1); + isSupported = ETrue; + } } - #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; -} + isSupported = EFalse; + RDEBUG("isSupported", isSupported); + return isSupported; + } // // ---------------------------------------------------------- -// CSecuritySettings::IsCodeBlocked() +// 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) - { - #ifdef __WINS__ - return EFalse; - #else//__WINS__ - #if defined(_DEBUG) - RDebug::Print(_L("(SECUI)CSecuritySettings::IsUpinBlocked() BEGIN")); - #endif - RMmCustomAPI::TSecurityCodeType secCodeType; + { + TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); + TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); + if (wcdmaSupported || upinSupported) + { + 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 + RDEBUG("IsBlocked", 0); + TInt ret = iCustomPhone.IsBlocked(secCodeType, isBlocked); + RDEBUG("ret", ret); + RDEBUG("isBlocked", isBlocked); return isBlocked; - #endif //__WINS__ - } + } else return EFalse; -} + } // // ---------------------------------------------------------- -// CSecuritySettings::GetActivePinCode() +// 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) - { - #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 + { + TBool wcdmaSupported(FeatureManager::FeatureSupported(KFeatureIdProtocolWcdma)); + TBool upinSupported(FeatureManager::FeatureSupported(KFeatureIdUpin)); + if (wcdmaSupported || upinSupported) + { + RMobilePhone::TMobilePhoneSecurityCode activePin; + RDEBUG("GetActivePin", 0); 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; + RDEBUG("activePin", activePin); + RDEBUG("RMobilePhone::ESecurityUniversalPin", + RMobilePhone::ESecurityUniversalPin); + if (activePin == RMobilePhone::ESecurityUniversalPin) + { + return ETrue; + } + return EFalse; } - #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; -} + } + +/**************************/ +// 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(""); + } + 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; + } + +// +// ---------------------------------------------------------- +// CSecuritySettings::AskSecCodeParamsL() +// For asking security code e.g in settings +// not used +// ---------------------------------------------------------- +// 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; + } // End of file