diff -r 000000000000 -r 5a93021fdf25 apengine/apsettingshandlerui/src/apsettingshandleruiImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/apengine/apsettingshandlerui/src/apsettingshandleruiImpl.cpp Thu Dec 17 08:55:21 2009 +0200 @@ -0,0 +1,2020 @@ +/* +* 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: +* Defines the main handler, CApSettingsHandlerImpl for +* the Access Point settings. +* +*/ + + +// INCLUDE FILES +#include "APSettingsHandlerUIVariant.hrh" + +#include +#include +#include +#include + +#include "ApsettingshandleruiImpl.h" +#include "ApSettingsHandlerUI.hrh" +#include "ApSelectorDialog.h" + +#include "ApSettingsDlg.h" + +#include "TextOverrides.h" +#include "ApSettingsModel.h" +#include "ApSelPopupList.h" +#include "ApSelQueryDialog.h" + +#include +#include + +#include + +#include "ApSettingsHandlerLogger.h" +#include + + +#include "ApSettingsHandlerUiPrivateCRKeys.h" +#include + +#include + +#include + +#include +#include + +#include + +#include + +// UID of general settings app, in which help texts are included +const TUid KHelpUidApSettingsHandler = { 0x100058EC }; + + +//#define __TEST_PERFORMANCE +/// ROM drive. +_LIT( KApSettingsResDriveZ, "z:" ); +/// Access point settings handler UI resource file name. +_LIT( KApSettingsResFileName, "apsetui.rsc" ); + + + +/// Estimated FFS overhead for deleting (in bytes). +LOCAL_C const TInt KEstimatedDeleteFfsOverhead = 48 * 1024; + + + +//KFeatureIdIPv6 +// #define KFeatureIdIPv6 KOtherFeatureFirst+88 + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TBool aNoEdit ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aNoEdit ); + CleanupStack::PushL( db ); + + db->ConstructL( aIspFilter, aBearerFilter, aSortType ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC") + + return db; + } + + + + +// --------------------------------------------------------- +// CApSettingsHandlerImplImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + CActiveApDb& aDb, + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TBool aNoEdit + ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aNoEdit ); + CleanupStack::PushL( db ); + + db->ConstructL( aDb, aIspFilter, aBearerFilter, aSortType ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC2") + + return db; + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TInt aReqIpvType, + TBool aNoEdit + ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aReqIpvType, + aNoEdit + ); + CleanupStack::PushL( db ); + + db->ConstructL( aIspFilter, aBearerFilter, aSortType ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC3") + + return db; + } + + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + CActiveApDb& aDb, + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TInt aReqIpvType, + TBool aNoEdit + ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aReqIpvType, + aNoEdit + ); + CleanupStack::PushL( db ); + + db->ConstructL( aDb, aIspFilter, aBearerFilter, aSortType ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC4") + + return db; + } + + + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TInt aReqIpvType, + TVpnFilterType aVpnFilterType, + TBool aNoEdit + ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aReqIpvType, + aNoEdit + ); + CleanupStack::PushL( db ); + + db->ConstructL( aIspFilter, aBearerFilter, + aSortType, aVpnFilterType ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC5") + + return db; + } + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + CActiveApDb& aDb, + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TInt aReqIpvType, + TVpnFilterType aVpnFilterType, + TBool aNoEdit + ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aReqIpvType, + aNoEdit + ); + CleanupStack::PushL( db ); + + db->ConstructL( aDb, aIspFilter, aBearerFilter, + aSortType, aVpnFilterType ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC6") + + return db; + } + + + + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::NewLC +// --------------------------------------------------------- +// +CApSettingsHandlerImpl* CApSettingsHandlerImpl::NewLC( + CActiveApDb& aDb, + TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TInt aReqIpvType, + TVpnFilterType aVpnFilterType, + TBool aIncludeEasyWlan, + TBool aNoEdit + ) + { + APSETUILOGGER_CREATE; + + CApSettingsHandlerImpl* db = + new( ELeave ) CApSettingsHandlerImpl( aStartWithSelection, + aListType, + aSelMenuType, + aReqIpvType, + aNoEdit + ); + CleanupStack::PushL( db ); + db->ConstructL( aDb, aIspFilter, aBearerFilter, + aSortType, aVpnFilterType, aIncludeEasyWlan ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::NewLC7") + + return db; + } + + + +// Destructor +CApSettingsHandlerImpl::~CApSettingsHandlerImpl() + { + APSETUILOGGER_DELETE; + + if ( iTextOverrides ) + { + delete iTextOverrides; + iTextOverrides = NULL; + APSETUILOGGER_WRITE( EAPI,"EApImpl::txtoverrides deleted"); + } + if ( iExt ) + { + if ( iExt->iResOffset ) + { + iModel->EikEnv()->DeleteResourceFile( iExt->iResOffset ); + APSETUILOGGER_WRITE( EAPI,"EApImpl::Resource file deleted"); + } + if ( iExt->iIsFeatureManagerInitialised ) + { + FeatureManager::UnInitializeLib(); + APSETUILOGGER_WRITE( EAPI,"EApImpl::FeatMan. uninitialised"); + } + } + + if ( iModel ) + { + delete iModel; + iModel = NULL; + } + + APSETUILOGGER_WRITE( EAPI,"EApImpl::imodel deleted"); + + delete iExt; + + APSETUILOGGER_WRITE( EAPI,"EApImpl::iext deleted"); + } + + +// Constructor +CApSettingsHandlerImpl::CApSettingsHandlerImpl( TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TBool aNoEdit + ) +:iStartWithSelection( aStartWithSelection ), +iListType( aListType ), +iSelMenuType( aSelMenuType ), +iIspFilter( KEApIspTypeAll ), +iBearerFilter( EApBearerTypeAll ), +iReqIpvType( EIPv4 ), +iEventStore( KApUiEventNone ), +iNoEdit( aNoEdit ) + { + iHelpMajor = KHelpUidApSettingsHandler; + } + + + + + +// Constructor +CApSettingsHandlerImpl::CApSettingsHandlerImpl( TBool aStartWithSelection, + TSelectionListType aListType, + TSelectionMenuType aSelMenuType, + TInt aReqIpvType, + TBool aNoEdit + ) +:iStartWithSelection( aStartWithSelection ), +iListType( aListType ), +iSelMenuType( aSelMenuType ), +iIspFilter( KEApIspTypeAll ), +iBearerFilter( EApBearerTypeAll ), +iReqIpvType( aReqIpvType ), +iEventStore( KApUiEventNone ), +iNoEdit( aNoEdit ) + { + iHelpMajor = KHelpUidApSettingsHandler; + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::ConstructL +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::ConstructL( TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ConstructL") + + DoConstructL( NULL, aIspFilter, aBearerFilter, + aSortType, EVpnFilterBoth, EFalse ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ConstructL") + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::ConstructL +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::ConstructL( CActiveApDb& aDb, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ConstructL2") + + DoConstructL( &aDb, aIspFilter, aBearerFilter, + aSortType, EVpnFilterBoth, EFalse ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ConstructL2") + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::ConstructL +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::ConstructL( + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TVpnFilterType aVpnFilterType + ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ConstructL3") + + DoConstructL( NULL, aIspFilter, aBearerFilter, + aSortType, aVpnFilterType, EFalse ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ConstructL3") + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::ConstructL +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::ConstructL( + CActiveApDb& aDb, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TVpnFilterType aVpnFilterType + ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ConstructL4") + + DoConstructL( &aDb, aIspFilter, aBearerFilter, + aSortType, aVpnFilterType, EFalse ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ConstructL4") + } + + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::ConstructL +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::ConstructL( + CActiveApDb& aDb, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TVpnFilterType aVpnFilterType, + TBool aIncludeEasyWlan + ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ConstructL5") + + DoConstructL( &aDb, aIspFilter, aBearerFilter, + aSortType, aVpnFilterType, aIncludeEasyWlan ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ConstructL5") + } + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::SetFilter +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::SetFilterL( TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::SetFilterL") + + iIspFilter = aIspFilter; + iBearerFilter = aBearerFilter; + iExt->iSortType = aSortType; + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::SetFilterL") + } + + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::SetTextOverrideL +// --------------------------------------------------------- +// +void CApSettingsHandlerImpl::SetTextOverrideL( TTextID aText2Change, + const TDesC& aNewText ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::SetTextOverrideL") + + __ASSERT_DEBUG( iTextOverrides, Panic( ENullPointer ) ); + iTextOverrides->SetTextOverrideL( aText2Change, aNewText ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::SetTextOverrideL") + } + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::TextOverrideL +// --------------------------------------------------------- +// +const TDesC& CApSettingsHandlerImpl::TextOverrideL( TTextID aTextId ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::TextOverrideL <- ->") + + __ASSERT_DEBUG( iTextOverrides, Panic( ENullPointer ) ); + return iTextOverrides->TextOverrideL( aTextId ); + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::RunSettingsL +// --------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::RunSettingsL( TUint32 aHighLight, + TUint32& aSelected ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::RunSettingsL") + + // this function is only called from outside, need to init iEventStore + iEventStore = KApUiEventNone; + + TRAPD( err, HandleRunSettingsL( aHighLight, aSelected ) ); + if ( iEventStore & KApUiEventInternal ) + { + // internal 'exit', not an error, + // clear flag and return normally + iEventStore &= (~KApUiEventInternal); + } + else + { + User::LeaveIfError(err); + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::RunSettingsL") + + return iEventStore; + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::Cvt() +// --------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::Cvt() + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::Cvt") + + return KErrNone; + } + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::DoRunSettingsL +// --------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::DoRunSettingsL( TUint32 aHighLight, + TUint32& aSelected ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoRunSettingsL") + + __ASSERT_DEBUG( iTextOverrides, Panic( ENullPointer ) ); + + if ( ( iListType == EApSettingsSelListIsPopUp ) || + ( iListType == EApSettingsSelListIsPopUpWithNone ) ) + { + DoRunSetPageSettingsL( aHighLight, aSelected ); + } + else + { + DoRunListSettingsL( aHighLight, aSelected ); + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoRunSettingsL") + return 0; + } + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::RunViewerL +// --------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::RunViewerL( TUint32 aUid ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::RunViewerL") + + // this function is only called from outside, need to init iEventStore + iEventStore = KApUiEventNone; + +#ifdef __TEST_OOMDEBUG + if ( iMemTestOn ) + { + TInt leavecode( KErrNoMemory ); + TInt ts( GetTestStateL() ); + + TBuf<48> buf; + buf.Format( _L("\r\n\t( ts: %d )"), ts ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + + if ( ts == KViewerTest ) + { + TBuf<48> buf; + APSETUILOGGER_WRITE_BUF( EApImpl, _L("Starting KViewerTest memtest") ); + + TUint32 rate( 0 ); + TUint32 retrycount( KOOMRetryCount ); + TUint32 retryoffset( KOOMRetryOffset ); + for ( + rate = 1; + ((rate < 50000) && (leavecode == KErrNoMemory)) + || retrycount; + rate++ + ) + { + __UHEAP_SETFAIL( RHeap::EDeterministic, rate ); + TRAP( leavecode, DoRunViewerL( aUid ) ); + __UHEAP_RESET; + if ( !leavecode ) + { + retrycount--; + rate += retryoffset; + } + } + User::LeaveIfError( leavecode ); + buf.Format( _L("\t Memtest finished, max. rate was: %d )"), rate ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + } + else + { + DoRunViewerL( aUid ); + } + } + else + { + DoRunViewerL( aUid ); + } +#else + DoRunViewerL( aUid ); +#endif // __TEST_OOMDEBUG + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::RunViewerL") + + return iEventStore; + } + + + +// --------------------------------------------------------- +// CApSettingsHandlerImpl::DoRunViewerL +// --------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::DoRunViewerL( TUint32 aUid ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoRunViewerL") + + TInt retval( KErrNone ); + + TBool protSupported = FeatureManager::FeatureSupported( + KFeatureIdSettingsProtection ); + + + TTransactionResult ownTransaction = iModel->StartTransactionLC + ( + /*aWrite*/EFalse, + /*aShowNote*/ETrue, + /*aRetry*/ETrue + ); + if ( ownTransaction != EFailedWithLocked ) + { + TBool isinuse = iModel->ApUtils()->IsAPInUseL( aUid ); + TBool isprotected(EFalse); + if ( protSupported ) + { + isprotected = iModel->ApUtils()->IsReadOnlyL( aUid ); + isprotected |= CApProtHandler::IsTableProtectedL( + iModel->Database()->Database() ); + } + + TBool isvpn = iModel->VpnEngine()->IsVpnApL( aUid ); + + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + + if ( isinuse ) + { + // Ap is in use right now, can not edit or delete, + // show information note qtn_set_note_iap_in_use + ShowNoteL( R_APUI_NOTE_AP_IN_USE_EDIT ); + } + else + { + if ( protSupported && isprotected ) + { + ShowNoteL( R_APUI_NOTE_PROTECTED_AP_SETT ); + } + else + { // not in use, not protected, check if it is vpn + if ( isvpn ) + { + ShowNoteL( R_APUI_NOTE_VPN_AP_SETT ); + } + else + { // may start wondering about editing... + TApBearerType bearer = iModel->ApUtils()->BearerTypeL( aUid ); +#ifdef __TEST_LAN_BEARER + if ( bearer == EApBearerTypeLAN ) + { + User::Leave( KErrNotSupported ); + // ShowNoteL( R_APUI_AP_LAN_NOT_SUPPORTED ); + // Leave needed? + } + else + { + CApSettingsDlg* iMyDialog = + CApSettingsDlg::NewL( iIspFilter, + iBearerFilter, + iExt->iSortType, + iEventStore, + iReqIpvType + ); + + iMyDialog->SetTextOverrides( iTextOverrides ); + + retval = iMyDialog->ConstructAndRunLD( + *iModel, *this, aUid ); + } +#else + if ( bearer == EApBearerTypeLANModem ) + { + User::Leave( KErrNotSupported ); + // ShowNoteL( R_APUI_AP_LAN_NOT_SUPPORTED ); + // Leave needed? + } + else + { + CApSettingsDlg* iMyDialog = + CApSettingsDlg::NewL( iIspFilter, + iBearerFilter, + iExt->iSortType, + iEventStore, + iReqIpvType + ); + + iMyDialog->SetTextOverrides( iTextOverrides ); + + retval = iMyDialog->ConstructAndRunLD( + *iModel, *this, aUid ); + } +#endif // __TEST_LAN_BEARER + } + } + } + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoRunViewerL") + + return retval; + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::HandleApDeleteCmdL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::HandleApDeleteCmdL( TUint32 aUid, TBool aIsLast ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::HandleApDeleteCmdL") + + // OOD handling. If disk space is low, + // we try to get some spare. + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + TBool diskLow = SysUtil::FFSSpaceBelowCriticalLevelL + ( &fs, KEstimatedDeleteFfsOverhead ); + + RSharedDataClient sdClient; + if ( diskLow ) + { + User::LeaveIfError( sdClient.Connect() ); + CleanupClosePushL( sdClient ); + sdClient.RequestFreeDiskSpaceLC + ( KEstimatedDeleteFfsOverhead ); + } + + // check that the Ap is not used so it can be deleted!! + TTransactionResult ownTransaction = iModel->StartTransactionLC( + /*aWrite*/EFalse, + /*aShowNote*/ETrue, + /*aRetry*/ETrue ); + if ( ownTransaction != EFailedWithLocked ) + { + TBool isinuse = iModel->ApUtils()->IsAPInUseL( aUid ); + TApBearerType bearer = iModel->ApUtils()->BearerTypeL( aUid ); +#ifdef __TEST_LAN_BEARER + if ( bearer == EApBearerTypeLAN ) + { + User::Leave( KErrNotSupported ); + } +#endif // __TEST_LAN_BEARER + if ( bearer == EApBearerTypeLANModem ) + { + User::Leave( KErrNotSupported ); + // Leave needed? + } + + TBool protSupported = FeatureManager::FeatureSupported( + KFeatureIdSettingsProtection ); + TBool isprotected(EFalse); + if ( protSupported ) + { + isprotected = iModel->ApUtils()->IsReadOnlyL( aUid ); + } + + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + + if ( isinuse ) + { + // Ap is in use right now, can not edit or delete, + // show information note qtn_set_note_iap_in_use + ShowNoteL( R_APUI_NOTE_AP_IN_USE_DELETE ); + } + else + { // not in use, maybe protected? + if ( protSupported && isprotected ) + { + ShowNoteL( R_APUI_NOTE_PROTECTED_AP ); + } + else + { // not in use or protected, may start wondering about delete... + // need to check whether it is the last one... + TBool candelete( ETrue ); + // Linked to VPN? + TBool isvpn = iModel->VpnEngine()->IsVpnApL( aUid ); + if ( !isvpn ) + { + if ( iExt->iVariant & KApUiEditOnlyVPNs ) + { + candelete = EFalse; + } + else + { + HBufC* sgd = NULL; + sgd = iModel->GetLinkedVpnAccessPointLC( aUid ); + if ( sgd ) + {// has linked VPN, + // According to current spec. there should + // be something like linked to VPN, Delete? + // BUT it causes incomplete access point to exist + // hard to handle, therefore last minute change + // is that it can not be delted. + /* + if ( !AskQueryL( R_APUI_IAP_DEL_IAP_ASSOCIATED, sgd ) ) + { + candelete = EFalse; + } + */ + ShowNoteL( R_APUI_NOTE_AP_IN_USE_DELETE ); + candelete = EFalse; + + CleanupStack::PopAndDestroy( sgd ); + } + else + { // simply confirm + candelete = ConfirmDeleteL( aUid, aIsLast ); + } + } + } + else + { // simply confirm + candelete = ConfirmDeleteL( aUid, aIsLast ); + } + if ( candelete ) + { // seems that we can delete it, so let's go on + iModel->RemoveApL( aUid ); + iEventStore |= KApUiEventDeleted; + } + } + } + } + + if ( diskLow ) + { + // Cancel RequestFreeDiskSpaceLC (by popping off an destroy); + // close sdClient. + CleanupStack::PopAndDestroy( 2 ); + } + CleanupStack::PopAndDestroy(); // fs, will also close it + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::HandleApDeleteCmdL") + } + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::HandleApBlankNewL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::HandleApBlankNewL( TInt aBearers, TInt aIsps ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::HandleApBlankNewL") + + TUint32 retval( KErrNone ); + +#ifdef __TEST_OOMDEBUG + if ( iMemTestOn ) + { + TInt leavecode( KErrNoMemory ); + + TInt ts( GetTestStateL() ); + + if ( ts == KCreateBlankTest ) + { + TBuf<48> buf; + APSETUILOGGER_WRITE_BUF( EApImpl, _L("Starting KCreateBlankTest memtest") ); + + TUint32 rate( 0 ); + TUint32 retrycount( KOOMRetryCount ); + TUint32 retryoffset( KOOMRetryOffset ); + for ( + rate = 1; + ((rate < 50000) && (leavecode == KErrNoMemory)) + || retrycount; + rate++ + ) + { + __UHEAP_SETFAIL( RHeap::EDeterministic, rate ); + TRAP( leavecode, + retval = DoHandleApBlankNewL( aBearers, aIsps ) ); + __UHEAP_RESET; + if ( !leavecode ) + { + retrycount--; + rate += retryoffset; + } + } + User::LeaveIfError( leavecode ); + buf.Format( _L("\t Memtest finished, max. rate was: %d )"), rate ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + } + else + { + retval = DoHandleApBlankNewL( aBearers, aIsps ); + } + } + else + { + retval = DoHandleApBlankNewL( aBearers, aIsps ); + } +#else + retval = DoHandleApBlankNewL( aBearers, aIsps ); +#endif // __TEST_OOMDEBUG + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::HandleApBlankNewL") + return retval; + } + + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::HandleApUseOldNewL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::HandleApUseOldNewL() + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::HandleApUseOldNewL") + + TUint32 retval = KErrNone; + +#ifdef __TEST_OOMDEBUG + if ( iMemTestOn ) + { + TInt leavecode( KErrNoMemory ); + TInt ts( GetTestStateL() ); + + TBuf<48> buf; + buf.Format( _L("\r\n\t( ts: %d )"), ts ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + + if ( ts == KQueryTest ) + { + TBuf<48> buf; + APSETUILOGGER_WRITE_BUF( EApImpl, _L("Starting KQueryTest memtest") ); + TUint32 rate( 0 ); + TUint32 retrycount( KOOMRetryCount ); + TUint32 retryoffset( KOOMRetryOffset ); + for ( + rate = 1; + ((rate < 50000) && (leavecode == KErrNoMemory)) + || retrycount; + rate++ + ) + { + __UHEAP_MARK; + __UHEAP_SETFAIL( RHeap::EDeterministic, rate ); + TRAP( leavecode, retval = SelectApToCopyL() ); + __UHEAP_RESET; + __UHEAP_MARKEND; + if ( !leavecode ) + { + retrycount--; + rate += retryoffset; + } + } + User::LeaveIfError( leavecode ); + buf.Format( _L("\t Memtest finished, max. rate was: %d )"), rate ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + } + else + { + retval = SelectApToCopyL(); + } + } + else + { + retval = SelectApToCopyL(); + } +#else + retval = SelectApToCopyL(); +#endif // __TEST_OOMDEBUG + + if ( retval != (TUint32)KErrNone ) + { // so user had chosen something +#ifdef __TEST_OOMDEBUG + if ( iMemTestOn ) + { + TInt leavecode( KErrNoMemory ); + TInt ts( GetTestStateL() ); + if ( ts == KCreateUseExistTest ) + { + TBuf<48> buf; + APSETUILOGGER_WRITE_BUF + ( _L("Starting KCreateUseExistTest memtest") ); + TUint32 rate( 0 ); + TUint32 retrycount( KOOMRetryCount ); + TUint32 retryoffset( KOOMRetryOffset ); + for ( + rate = 1; + ((rate < 50000) && (leavecode == KErrNoMemory)) + || retrycount; + rate++ + ) + { + __UHEAP_SETFAIL( RHeap::EDeterministic, rate ); + TRAP( leavecode, retval = DoHandleApUseOldNewL( retval ) ); + __UHEAP_RESET; + if ( !leavecode ) + { + retrycount--; + rate += retryoffset; + } + } + User::LeaveIfError( leavecode ); + buf.Format( _L("\t Memtest finished, max. rate was: %d )"), + rate ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + } + else + { + retval = DoHandleApUseOldNewL( retval ); + } + } + else + { + retval = DoHandleApUseOldNewL( retval ); + } +#else + retval = DoHandleApUseOldNewL( retval ); +#endif // __TEST_OOMDEBUG + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::HandleApUseOldNewL") + + return retval; + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::EditAfterCreateL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::EditAfterCreateL( TUint32 aUid, + CApAccessPointItem* aItem ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::EditAfterCreateL") + + CApSettingsDlg* iMySetDialog = CApSettingsDlg::NewL + ( + KEApIspTypeAll, + EApBearerTypeAll, + KEApSortNameAscending, + iEventStore, + iReqIpvType + ); + + iMySetDialog->SetTextOverrides( iTextOverrides ); + iMySetDialog->ConstructAndRunLD( *iModel, *this, aUid, aItem ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::EditAfterCreateL") + + return aUid; + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::DoConstructL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::DoConstructL( CActiveApDb* aDb, + TInt aIspFilter, + TInt aBearerFilter, + TInt aSortType, + TVpnFilterType aVpnFilterType, + TBool aIncludeEasyWlan ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoConstructL") + + iExt = new ( ELeave )TApSetHandlerImplExtra; + iExt->iResOffset = 0; + iExt->iIsIpv6Supported = EFalse; + iExt->iIsFeatureManagerInitialised = EFalse; + iExt->iExtra = 0; + iExt->iSortType = KEApSortNameAscending; + iExt->iVpnFilterType = aVpnFilterType; + iExt->iVariant = GetVariantL(); + iExt->iIncludeEasyWlan = aIncludeEasyWlan; + +#ifdef __TEST_CDMA_WRITE_PROTECT + iExt->iVariant |= KApUiEditOnlyVPNs; +#endif // __TEST_CDMA_WRITE_PROTECT + iIspFilter = KEApIspTypeAll; + iBearerFilter = aBearerFilter; + + // get IPv6 features from feature manager + FeatureManager::InitializeLibL(); + iExt->iIsFeatureManagerInitialised = ETrue; + + iExt->iIsIpv6Supported = + FeatureManager::FeatureSupported( KFeatureIdIPv6 ); +#ifdef __TEST_IPV6_SUPPORT + iExt->iIsIpv6Supported = ETrue; +#endif // __TEST_IPV6_SUPPORT + + // we ask IPv6 only if it is asked by client AND supported by the phone + iReqIpvType = iExt->iIsIpv6Supported ? iReqIpvType : EIPv4; + + +#ifdef __TEST_OOMDEBUG + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + TUint att; + if ( fs.Att( KTestFileName, att ) == KErrNone ) + { + iMemTestOn = ETrue; + } + else + { + iMemTestOn = EFalse; + } + CleanupStack::PopAndDestroy(); // fs, will also close it +#endif // __TEST_OOMDEBUG + iTextOverrides = CTextOverrides::NewL(); + // No need to PushL( iTextOverrides ), it's pointer is owned + // & will be deleted in destructor, because 'this' is already + // on the CleanupStack... + if ( aDb ) + { + iModel = CApSettingsModel::NewL( *aDb, aIspFilter, + aBearerFilter, aSortType, + iReqIpvType, + iExt->iVpnFilterType, + iExt->iVariant, + iExt->iIncludeEasyWlan, + iNoEdit ); + } + else + { + iModel = CApSettingsModel::NewL( aIspFilter, aBearerFilter, + aSortType, iReqIpvType, + iExt->iVpnFilterType, + iExt->iVariant, + iExt->iIncludeEasyWlan, + iNoEdit ); + } + SetFilterL( aIspFilter, aBearerFilter, aSortType ); + + // can't use resource here because it has not been added yet.... + TFileName resourceFile; + resourceFile.Append( KApSettingsResDriveZ ); + resourceFile.Append( KDC_RESOURCE_FILES_DIR ); + resourceFile.Append( KApSettingsResFileName ); + BaflUtils::NearestLanguageFile( iModel->EikEnv()->FsSession(), + resourceFile ); + // as we are not an Application having iCoeEnv, we must figure it out, + // no matter what it takes. Also it is getted once per construction... + iExt->iResOffset = iModel->EikEnv()->AddResourceFileL( resourceFile ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoConstructL") + } + + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::DoRunSetPageSettingsL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::DoRunSetPageSettingsL( TUint32 aHighLight, + TUint32& aSelected ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoRunSetPageSettingsL") + + TInt aHigh = aHighLight; + + HBufC* titlebuf; + + if ( iTextOverrides->IsTextOverridenL( EPopupPromptText ) ) + { + titlebuf = iTextOverrides->TextOverrideL( + EPopupPromptText + ).AllocLC(); + } + else + { + titlebuf = iModel->EikEnv()->AllocReadResourceLC + ( + R_APUI_VIEW_DEFAULT_AP + ); + } + /* + * We need to pass an int& as starting selection to + * CAknRadioButtonSettingPage + * But we use preferred UID & not list-item nuber... + * Also it sets selection in it's ConstructL() but our list is filled + * up dynamically and it must be done after ConstructL() + * (list must be already constructed...) + * Therefore we pass a dummy int& initialized to 0 as + * selecting the 0th element does no harm... + */ + TInt Dummy( -1 ); + // needs this Dummy array to pass it to CAknSettingPage's constructor... + CDesCArrayFlat* aItemArray = new ( ELeave ) CDesCArrayFlat( 1 ); + CleanupStack::PushL( aItemArray ); + CApSelPopupList* dlg = CApSelPopupList::NewL + ( + *iModel, + *this, + Dummy, + aHigh, + iSelMenuType, + iIspFilter, + iBearerFilter, + iExt->iSortType, + iEventStore, + aItemArray, + iListType == EApSettingsSelListIsPopUpWithNone, + iReqIpvType, + iExt->iVpnFilterType, + iExt->iIncludeEasyWlan, + iNoEdit + ); + CleanupStack::PushL( dlg ); + TPtrC ptr( titlebuf->Des() ); + dlg->SetSettingTextL( ptr ); + // dlg must be Pop-ed because ExecuteLD starts with PushL()... + CleanupStack::Pop(); + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + aSelected = aHigh; + } + CleanupStack::PopAndDestroy( 2 ); // aItemArray, titlebuf + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoRunSetPageSettingsL") + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::DoRunListSettingsL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::DoRunListSettingsL( TUint32 aHighLight, + TUint32& aSelected ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoRunListSettingsL") + + CApSelectorDialog* iMyDialog = CApSelectorDialog::NewL + ( + iListType, + iSelMenuType, + iIspFilter, + iBearerFilter, + iExt->iSortType, + iEventStore, + iNoEdit, + iReqIpvType + ); + iMyDialog->SetTextOverrides( iTextOverrides ); + + iMyDialog->ConstructAndRunLD( *iModel, *this, aHighLight, aSelected ); + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoRunListSettingsL") + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::DoHandleApUseOldNewL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::DoHandleApUseOldNewL( TUint32 aSelected ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoHandleApUseOldNewL") + + TInt retval = KErrNone; + + TTransactionResult ownTransaction = iModel->StartTransactionLC + ( /*aWrite*/ETrue, + /*aShowNote*/ETrue, + /*aRetry*/ETrue + ); + if ( ownTransaction != EFailedWithLocked ) + { + // check the original bearer's type + TApBearerType bearer = iModel->ApUtils()->BearerTypeL( aSelected ); +#ifdef __TEST_LAN_BEARER + if ( bearer == EApBearerTypeLAN ) + { + User::Leave( KErrNotSupported ); +// ShowNoteL( R_APUI_AP_LAN_NOT_SUPPORTED ); +// User::Leave( KLeaveWithoutAlert ); + } +#endif // __TEST_LAN_BEARER + if ( bearer == EApBearerTypeLANModem ) + { + User::Leave( KErrNotSupported ); +// ShowNoteL( R_APUI_AP_LAN_NOT_SUPPORTED ); +// User::Leave( KLeaveWithoutAlert ); + } + TBool isprotected( EFalse ); + + TBool protSupported = FeatureManager::FeatureSupported( + KFeatureIdSettingsProtection ); + + if ( protSupported ) + { + isprotected = iModel->ApUtils()->IsReadOnlyL( aSelected ); + isprotected |= CApProtHandler::IsTableProtectedL( + iModel->Database()->Database() ); + } + if ( isprotected ) + { + ShowNoteL( R_APUI_NOTE_PROTECTED_AP_SETT ); + } + if ( !isprotected ) + { + TUint32 aUid = iModel->DataHandler()->CreateCopyFromL( aSelected ); + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + iEventStore |= KApUiEventCreatedUsedOld; + retval = aUid; + EditAfterCreateL( aUid ); + } + else + { + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + } + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoHandleApUseOldNewL") + return retval; + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::SelectApToCopyL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::SelectApToCopyL() + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::SelectApToCopyL") + + // = KErrNone just to suppress compiler warning C4701 + TUint32 aSelected = KErrNone; + TUint32 retval = KErrNone; + + CApSelQueryDialog* dlg = new ( ELeave ) CApSelQueryDialog( *iModel, + &aSelected ); + TInt iQueryOk = dlg->ExecuteLD( R_LIST_QUERY ); + if ( iQueryOk ) + { + retval = aSelected; + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::SelectApToCopyL") + return retval; + } + + + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::DoHandleApBlankNewL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::DoHandleApBlankNewL( TInt aBearers, TInt aIsps ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::DoHandleApBlankNewL") + + CApAccessPointItem* apitem = CApAccessPointItem::NewLC(); +/* +KEApIspTypeInternetOnly: + EApBearerTypeCSD, EApBearerTypeHSCSD, EApBearerTypeGPRS + +KEApIspTypeInternetAndWAP + EApBearerTypeCSD, EApBearerTypeHSCSD, EApBearerTypeGPRS + +KEApIspTypeWAPOnly + EApBearerTypeCSD, EApBearerTypeHSCSD, EApBearerTypeSMS, EApBearerTypeGPRS + +KEApIspTypeWAPMandatory + EApBearerTypeCSD, EApBearerTypeHSCSD, EApBearerTypeSMS, EApBearerTypeGPRS + +KEApIspTypeAll + All + + + EIspTypeInternetOnly, + EIspTypeWAPOnly, + EIspTypeInternetAndWAP + +*/ + ChooseBearerTypeL( aBearers, *apitem ); + + if ( aIsps & KEApIspTypeAll ) + { + apitem->WriteUint( EApIspIspType, EIspTypeInternetAndWAP ); + } + else + { + if ( aIsps & KEApIspTypeWAPOnly ) + { // EApBearerTypeCSD, EApBearerTypeHSCSD, EApBearerTypeGPRS, + apitem->WriteUint( EApIspIspType, EIspTypeWAPOnly ); + } + else + { + if ( aIsps & + ( KEApIspTypeWAPMandatory | KEApIspTypeMMSMandatory ) ) + { // EApBearerTypeCSD, EApBearerTypeHSCSD, EApBearerTypeGPRS + apitem->WriteUint( EApIspIspType, EIspTypeInternetAndWAP ); + } + else + { + if ( aIsps & KEApIspTypeInternetAndWAP ) + { + apitem->WriteUint( EApIspIspType, EIspTypeInternetAndWAP ); + } + else + { + if ( aIsps & KEApIspTypeInternetOnly ) + { + apitem->WriteUint( EApIspIspType, + EIspTypeInternetOnly ); + } + else + { + __ASSERT_DEBUG( EFalse, Panic( EInvalidIspRequest ) ); + } + } + } + } + } +/* +KEApIspTypeInternetOnly +KEApIspTypeWAPOnly +KEApIspTypeInternetAndWAP +KEApIspTypeWAPMandatory +KEApIspTypeAll +*/ + +// apitem->WriteUint( EApIspIspType, EIspTypeInternetOnly ); + + TUint32 aUid( KApNoneUID ); + HBufC* buf = HBufC::NewLC( KApMaxConnNameLength ); + TPtr16 ptr( buf->Des() ); + apitem->ReadTextL( EApWapAccessPointName, ptr ); + + TTransactionResult ownTransaction = iModel->StartTransactionLC( + ETrue, // aWrite + ETrue, // aShowNote + ETrue ); // aRetry + if ( ownTransaction != EFailedWithLocked ) + { + if ( iModel->ApUtils()->MakeValidNameL( ptr ) ) + { + apitem->SetNamesL( ptr ); + } + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + } + + aUid = EditAfterCreateL( KApNoneUID, apitem ); + CleanupStack::PopAndDestroy( 2 ); // apitem, buf + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::DoHandleApBlankNewL") + return aUid; + } + + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::HandleNetworkDeleteCmdL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::HandleNetworkDeleteCmdL( TUint32 aUid ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::HandleNetworkDeleteCmdL") + + // check that the Ap is not used so it can be deleted!! + TTransactionResult ownTransaction = iModel->StartTransactionLC( + /*aWrite*/EFalse, + /*aShowNote*/ETrue, + /*aRetry*/ETrue ); + if ( ownTransaction != EFailedWithLocked ) + { + TBool protSupported = FeatureManager::FeatureSupported( + KFeatureIdSettingsProtection ); + if ( protSupported ) + { + TBool isprotected = iModel->ApUtils()->IsReadOnlyL( aUid ); + if ( isprotected ) + { + ShowNoteL( R_APUI_NOTE_PROTECTED_AP ); + return; + } + } + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + + // not protected, may start wondering about delete... + // simply confirm + + // OOD handling. If disk space is low, + // we try to get some spare. + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + TBool diskLow = SysUtil::FFSSpaceBelowCriticalLevelL + ( &fs, KEstimatedDeleteFfsOverhead ); + RSharedDataClient sdClient; + if ( diskLow ) + { + User::LeaveIfError( sdClient.Connect() ); + CleanupClosePushL( sdClient ); + sdClient.RequestFreeDiskSpaceLC + ( KEstimatedDeleteFfsOverhead ); + } + // Handle getting the name, showing the query, + // and deleting the network group. + // get the name: + CApNetworkItem* net = CApNetworkItem::NewLC(); + iModel->DataHandler()->ReadNetworkL( aUid, *net ); + HBufC* buf = net->Name().AllocLC(); + if ( AskQueryL( R_APUI_IAP_ARE_YOU_SURE_TO_DEL, buf ) ) + { + iModel->DataHandler()->RemoveNetworkL( aUid ); + } + CleanupStack::PopAndDestroy( buf ); // buf + CleanupStack::PopAndDestroy( net ); + if ( diskLow ) + { + // Cancel RequestFreeDiskSpaceLC (by popping off an destroy); + // close scClient. + CleanupStack::PopAndDestroy( 2 ); + } + CleanupStack::PopAndDestroy(); // fs, will also close it + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::HandleNetworkDeleteCmdL") + } + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::GetVariantL +//---------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::GetVariantL() + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::GetVariantL") + + TInt variant( 0 ); + // Connecting and initialization: + CRepository* repository = + CRepository::NewL( KCRUidApSettingsHandlerUiLV ); + repository->Get( KApSettingsHandlerUiLVFlags, variant ); + delete repository; + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::GetVariantL") + return variant; + } + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::ConfirmDeleteL +//---------------------------------------------------------- +// +TInt CApSettingsHandlerImpl::ConfirmDeleteL( TUint32 aUid, TBool aIsLast ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ConfirmDeleteL") + + TInt retval( 0 ); + HBufC* sgd = HBufC::NewLC( KModifiableTextLength ); + TPtr ptr( sgd->Des() ); + + // OOD handling. If disk space is low, + // we try to get some spare. + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + TBool diskLow = SysUtil::FFSSpaceBelowCriticalLevelL + ( &fs, KEstimatedDeleteFfsOverhead ); + + RSharedDataClient sdClient; + if ( diskLow ) + { + User::LeaveIfError( sdClient.Connect() ); + CleanupClosePushL( sdClient ); + sdClient.RequestFreeDiskSpaceLC + ( KEstimatedDeleteFfsOverhead ); + } + + TTransactionResult ownTransaction = iModel->StartTransactionLC + ( + /*aWrite*/ETrue, + /*aShowNote*/ETrue, + /*aRetry*/ETrue, + /*aLFFSChecking*/EFalse + ); + if ( ownTransaction != EFailedWithLocked ) + { + iModel->ApUtils()->NameL( aUid, ptr ); + if ( ownTransaction == EOwnTransaction ) + { + TInt err = iModel->CommitTransaction(); + User::LeaveIfError( err ); + CleanupStack::Pop(); // RollbackTransactionOnLeave + } + + if ( aIsLast ) + { // we are deleting the last one, needs to confirm + retval = AskQueryL( R_APUI_IAP_DEL_LAST_AP, sgd ); + } + else + { // not the last one, simply confirm + // handle exotic language number conversion here + TPtr t(sgd->Des()); + AknTextUtils::LanguageSpecificNumberConversion( t ); + retval = AskQueryL( R_APUI_IAP_ARE_YOU_SURE_TO_DEL, sgd ); + } + } + + + CleanupStack::PopAndDestroy(); // sgd + if ( diskLow ) + { + // Cancel RequestFreeDiskSpaceLC (by popping off an destroy); + // close scClient. + CleanupStack::PopAndDestroy( 2 ); + } + CleanupStack::PopAndDestroy(); // fs, will also close it + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ConfirmDeleteL") + return retval; + } + + + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::HandleRunSettingsL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::HandleRunSettingsL( TUint32 aHighLight, + TUint32& aSelected ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::HandleRunSettingsL") + + if ( iStartWithSelection == EFalse ) + { + RunViewerL( aHighLight ); + } + else + { +#ifdef __TEST_OOMDEBUG + if ( iMemTestOn ) + { + TInt leavecode( KErrNoMemory ); + TInt state( GetTestStateL() ); + + if ( ( ( + ( iListType == EApSettingsSelListIsPopUp ) || + ( iListType == EApSettingsSelListIsPopUpWithNone ) ) && + ( state == KPopupListTest ) ) + || + ( + ( iListType == EApSettingsSelListIsListPane ) && + ( state == KDialogListTest ) ) ) + { + TBuf<48> buf; + if ( state == KDialogListTest ) + { + APSETUILOGGER_WRITE_BUF( EApImpl, \ + _L("Doing memtest KDialogListTest") ); + } + if ( state == KPopupListTest ) + { + APSETUILOGGER_WRITE_BUF( EApImpl, \ + _L("Doing memtest KPopupListTest") ); + } + TUint32 rate( 0 ); + TUint32 retrycount( KOOMRetryCount ); + TUint32 retryoffset( KOOMRetryOffset ); + for ( + rate = 1; + ((rate < 50000) && (leavecode == KErrNoMemory)) + || retrycount; + rate++ + ) + { + __UHEAP_SETFAIL( RHeap::EDeterministic, rate ); + TRAP( leavecode, + DoRunSettingsL( aHighLight, aSelected ) ); + __UHEAP_RESET; + if ( !leavecode ) + { + retrycount--; + rate += retryoffset; + } + } + User::LeaveIfError( leavecode ); + buf.Format( _L("\t Memtest finished, max. rate was: %d )"), + rate ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + } + else + { + DoRunSettingsL( aHighLight, aSelected ); + } + } + else + { + DoRunSettingsL( aHighLight, aSelected ); + } +#else + DoRunSettingsL( aHighLight, aSelected ); +#endif // __TEST_OOMDEBUG + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::HandleRunSettingsL") + } + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::ChooseBearerTypeL +//---------------------------------------------------------- +// +void CApSettingsHandlerImpl::ChooseBearerTypeL( TInt aBearers, + CApAccessPointItem& aItem ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::ChooseBearerTypeL") + + // Check for support in each case!!!!! + TBool gprssupported = ETrue; + TBool csdsupported = ETrue; // OK + TBool hscsdsupported = ETrue; // NO WAY TO CHECK IT + TBool wlansupported = ETrue; // OK + TBool lansupported = ETrue; // NO WAY TO CHECK IT + TBool lanmodemsupported = ETrue; // NO WAY TO CHECK IT + TBool cdmasupported = ETrue; // OK + + if ( iExt->iIsFeatureManagerInitialised ) + { + cdmasupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWcdma ); + csdsupported = FeatureManager::FeatureSupported( KFeatureIdAppCsdSupport ); + wlansupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan ); + } + + if ( ( ( aBearers & EApBearerTypeAll ) || + ( aBearers & EApBearerTypeGPRS ) ) && + gprssupported ) + { + aItem.SetBearerTypeL( EApBearerTypeGPRS ); + } + else + { + if ( ( ( aBearers & EApBearerTypeAll ) || + ( aBearers & EApBearerTypeHSCSD ) ) + && hscsdsupported ) + { + aItem.SetBearerTypeL( EApBearerTypeHSCSD ); + } + else + { + if ( ( ( aBearers & EApBearerTypeAll ) || + (aBearers & EApBearerTypeCSD ) ) && csdsupported ) + { + aItem.SetBearerTypeL( EApBearerTypeCSD ); + } + else + { + if ( ( ( aBearers & EApBearerTypeAll ) || + ( aBearers & EApBearerTypeWLAN ) ) + && wlansupported ) + { + aItem.SetBearerTypeL( EApBearerTypeWLAN ); + } + else + { + if ( ( ( aBearers & EApBearerTypeAll ) || + ( aBearers & EApBearerTypeLAN ) ) + && lansupported ) + { + aItem.SetBearerTypeL( EApBearerTypeLAN ); + } + else + { + if ( ( ( aBearers & EApBearerTypeAll ) || + ( aBearers & EApBearerTypeLANModem ) ) + && lanmodemsupported ) + { + aItem.SetBearerTypeL( EApBearerTypeLANModem ); + } + else + { + if ( ( ( aBearers & EApBearerTypeAll ) || + ( aBearers & EApBearerTypeCDMA ) ) + && cdmasupported ) + { + aItem.SetBearerTypeL( EApBearerTypeCDMA ); + } + else + { + User::Leave( KErrInvalidBearerType ); + } + } + } + } + } + } + } + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::ChooseBearerTypeL") + } + + + + +//---------------------------------------------------------- +// CApSettingsHandlerImpl::HandleDuplicateL +//---------------------------------------------------------- +// +TUint32 CApSettingsHandlerImpl::HandleDuplicateL( TUint32 aUid ) + { + APSETUILOGGER_ENTERFN( EApImpl,"Impl::HandleDuplicateL") + + TUint32 retval(KErrNone); + // so user had chosen something +#ifdef __TEST_OOMDEBUG + if ( iMemTestOn ) + { + TInt leavecode( KErrNoMemory ); + TInt ts( GetTestStateL() ); + if ( ts == KCreateUseExistTest ) + { + TBuf<48> buf; + APSETUILOGGER_WRITE_BUF + ( _L("Starting KCreateUseExistTest memtest") ); + TUint32 rate( 0 ); + TUint32 retrycount( KOOMRetryCount ); + TUint32 retryoffset( KOOMRetryOffset ); + for ( + rate = 1; + ((rate < 50000) && (leavecode == KErrNoMemory)) + || retrycount; + rate++ + ) + { + __UHEAP_SETFAIL( RHeap::EDeterministic, rate ); + TRAP( leavecode, retval = DoHandleApUseOldNewL( aUid ) ); + __UHEAP_RESET; + if ( !leavecode ) + { + retrycount--; + rate += retryoffset; + } + } + User::LeaveIfError( leavecode ); + buf.Format( _L("\t Memtest finished, max. rate was: %d )"), + rate ); + APSETUILOGGER_WRITE_BUF( EApImpl, buf ); + } + else + { + retval = DoHandleApUseOldNewL( aUid ); + } + } + else + { + retval = DoHandleApUseOldNewL( aUid ); + } +#else + retval = DoHandleApUseOldNewL( aUid ); +#endif // __TEST_OOMDEBUG + + APSETUILOGGER_LEAVEFN( EApImpl,"Impl::HandleDuplicateL") + return retval; + } + + +// End of File +