diff -r 000000000000 -r 307788aac0a8 sipplugins/sippsipsettingsui/src/sipsettlistsipprofsetmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sipplugins/sippsipsettingsui/src/sipsettlistsipprofsetmodel.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,534 @@ +/* +* Copyright (c) 2005 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: The model of the profile setting view +* +*/ + + +// INCLUDE FILES + +#include "sipsettlistsipprofsetmodel.h" +#include "gssipmodel.h" +#include "tsipsettingsdata.h" +#include "mgssipprofilehandler.h" +#include "gssippanics.h" +#include +#include +#include +#include +#include +#include //GUI Resource +#include +#include +#include +#include +#include "gssippluginlogger.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::CSIPSettListSIPProfSetModel +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSIPSettListSIPProfSetModel::CSIPSettListSIPProfSetModel( + MGSSIPProfileHandler* aHandler ) : + iHandler( aHandler ), + iLocked( EFalse ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::CSIPSettListSIPProfSetModel" ) + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::ConstructL() + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::ConstructL" ) + iProfileData = iHandler->ProfileData(); + // Find right profile from SIP profile array. + CArrayPtr* list = iHandler->ProfileArray(); + for ( TInt i = 0; i < list->Count(); i++ ) + { + TUint32 profileId ( KErrNone ); + list->At( i )->GetParameter( KSIPProfileId, profileId ); + if ( profileId == iProfileData->iID ) + { + // Get SIP profile lock information. + list->At( i )->GetParameter( KSIPProfileLocked, iLocked ); + list->At( i )->GetParameter( KSIPProfileRegistered, iRegistered ); + if ( iLocked && iRegistered ) + { + list->At( i )->GetParameter( KSIPAccessPointId, + iProfileData->iAPIndex ); + } + } + } + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSIPSettListSIPProfSetModel* CSIPSettListSIPProfSetModel::NewL( + MGSSIPProfileHandler* aHandler ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::NewL" ) + CSIPSettListSIPProfSetModel* self = + new ( ELeave ) CSIPSettListSIPProfSetModel( aHandler ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::~CSIPSettListSIPProfSetModel +// Destructor +// ----------------------------------------------------------------------------- +// +CSIPSettListSIPProfSetModel::~CSIPSettListSIPProfSetModel() + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::~CSIPSettListSIPProfSetModel" ) + if ( iTypeInfo ) + { + iTypeInfo->Close(); + delete iTypeInfo; + } + iAPsUIDs.Close(); + iSNAPUIDs.Close(); + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::Settings() +// Fetches settings of the modified profile +// ----------------------------------------------------------------------------- +// +TSIPSettingsData& CSIPSettListSIPProfSetModel::Settings() + { + return *iProfileData; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::GetAPListL +// Fetches Access Point settings +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::GetAPListL( + CArrayPtr* aArray, + TInt& aIndex ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetAPListL Start" ) + using namespace CMManager; + TInt i( 0 ); + iAPsUIDs.Reset(); + + RCmManager cmManager; + cmManager.OpenL(); + CleanupClosePushL( cmManager ); + + RArray< TUint32 > connectionMethodsIds; + CleanupClosePushL( connectionMethodsIds ); + TBool checkBearerType(ETrue); + TBool legacyOnly(EFalse); + TBool easyWlan(EFalse); + cmManager.ConnectionMethodL( connectionMethodsIds, + checkBearerType, + legacyOnly, + easyWlan ); + + for( i = 0; i < connectionMethodsIds.Count(); i++ ) + { + // New + TUint32 iapId = connectionMethodsIds[i]; + HBufC* apName = + cmManager.GetConnectionMethodInfoStringL( iapId, ECmName ); + CleanupStack::PushL( apName ); + // Add Access Point name to enumerated text list. + CAknEnumeratedText* item = + new( ELeave )CAknEnumeratedText( i, apName ); + CleanupStack::Pop( apName ); // Ownership is transferred to item + CleanupStack::PushL( item ); + aArray->AppendL( item ); + CleanupStack::Pop( item ); + + // Add Access Point id to id list. + iAPsUIDs.AppendL( iapId ); + } + + CleanupStack::PopAndDestroy(); // connectionMethodsId + CleanupStack::PopAndDestroy(); // cmManager + + // Get LAN AP's also if we are under emulator environment. + #ifdef __WINS__ + CCommsDatabase* db = CCommsDatabase::NewL( EDatabaseTypeIAP ); + CleanupStack::PushL( db ); + CCommsDbTableView* table = db->OpenIAPTableViewMatchingBearerSetLC( + KCommDbBearerLAN, ECommDbConnectionDirectionOutgoing ); + TInt error = table->GotoFirstRecord(); + while ( error == KErrNone ) + { + TUint32 id( 0 ); + TPtrC ptr( COMMDB_ID ); + TPtrC ptr2( COMMDB_NAME ); + + // Get AP id and name from CommsDB. + table->ReadUintL( ptr, id ); + + if ( iAPsUIDs.Find( id ) < 0 ) + { + // AP not in the list yet + HBufC* txt = table->ReadLongTextLC( ptr2 ); + + CAknEnumeratedText* item = + new( ELeave )CAknEnumeratedText( i, txt ); + CleanupStack::Pop( txt ); // ownership of txt changes to item + CleanupStack::PushL( item ); + aArray->AppendL( item ); + CleanupStack::Pop( item ); + + // Add Access Point id to id list. + iAPsUIDs.AppendL( id ); + } + + error = table->GotoNextRecord(); + i++; // To next enumeration + } + CleanupStack::PopAndDestroy( table ); + CleanupStack::PopAndDestroy( db ); + #endif // __WINS__ + + // Loop through the list to find seleced profile. + for ( TInt j = 0; j < iAPsUIDs.Count(); j++ ) + { + if ( iProfileData->iAPIndex == TInt( iAPsUIDs[j] ) ) + { + // Set the currently active access point + aIndex = j; + } + } + __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetAPListL End" ) + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::GetDestinationsListL +// Fetches destinations settings +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::GetDestinationsListL( + CArrayPtr* aArray, + TInt& aIndex ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetDestinationsListL Start" ) + iSNAPUIDs.Reset(); + + RCmManager cmManager; + cmManager.OpenL(); + CleanupClosePushL(cmManager); + + RArray destinations; + CleanupClosePushL(destinations); + cmManager.AllDestinationsL(destinations); + + RCmDestination destination; + HBufC *destinationName; + + for( TInt i = 0; i < destinations.Count(); i++) + { + destination = cmManager.DestinationL(destinations[i]); + CleanupClosePushL(destination); + + destinationName = destination.NameLC(); + CAknEnumeratedText* destItem = + new( ELeave )CAknEnumeratedText( i, destinationName ); + CleanupStack::PushL( destItem ); + aArray->AppendL( destItem ); + CleanupStack::Pop( destItem ); + TUint32 destId = destination.Id(); + iSNAPUIDs.Append( destId ); + CleanupStack::Pop( destinationName ); // Ownership is transferred to item + destinationName = NULL; + CleanupStack::PopAndDestroy(); // destination + } + + CleanupStack::PopAndDestroy(); // destinations + CleanupStack::PopAndDestroy(); // cmManager + + // Loop through the list to find seleced profile. + for ( TInt j = 0; j < iSNAPUIDs.Count(); j++ ) + { + if ( iProfileData->iSNAPIndex == TInt( iSNAPUIDs[j] ) ) + { + // Set the currently active access point + aIndex = j; + } + } + __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetDestinationsListL End" ) + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::GetTypeListL +// Fetches Service type list settings +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::GetTypeListL( + CArrayPtr* aArray, + TInt& aIndex ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetTypeListL Start" ) + if ( iTypeInfo ) + { + iTypeInfo->Close(); + delete iTypeInfo; + iTypeInfo = NULL; + } + + iTypeInfo = iHandler->TypeListL(); + + TInt i( 0 ); + TInt count( iTypeInfo->Count() ); + + // Set aIndex to be the first item if no service profile is set + aIndex = 0; + for ( i = 0; i < count; i++ ) + { + TSIPProfileTypeInfo info = ProfileTypeInfo( i ); + if ( ( info.iSIPProfileName == + iProfileData->iServiceProfile.iSIPProfileName ) && + ( info.iSIPProfileClass == + iProfileData->iServiceProfile.iSIPProfileClass ) ) + { + // Found the currently active index + aIndex = i; + } + + // Set correct names based on profile type. + HBufC* profTxt = NULL; + if ( info.iSIPProfileClass == TSIPProfileTypeInfo::EInternet ) + { + profTxt = StringLoader::LoadLC( R_QTN_SIP_IETF ); + } + else if ( info.iSIPProfileClass == TSIPProfileTypeInfo::EIms ) + { + profTxt = StringLoader::LoadLC( R_QTN_SIP_THREE_GPP ); + } + else + { + profTxt = HBufC::NewLC( KMaxServiceTypeName ); + profTxt->Des().Copy( ProfileTypeInfo( i ).iSIPProfileName ); + } + + CAknEnumeratedText* item = + new ( ELeave ) CAknEnumeratedText( i, profTxt ); + CleanupStack::Pop( profTxt ); + + CleanupStack::PushL( item ); + aArray->AppendL( item ); + CleanupStack::Pop( item ); + } + __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetTypeListL End" ) + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::ProviderNameLC +// Returns the name of the service provider +// ----------------------------------------------------------------------------- +// +HBufC* CSIPSettListSIPProfSetModel::ProviderNameLC() + { + HBufC* buf = iProfileData->iProviderName.AllocLC(); + return buf; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::StoreServiceProfileSetting +// Stores the service profile setting, i.e. matches the chosen +// index to the TSIPProfileTypeInfo struct accordingly +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::StoreServiceProfileSetting() + { + iProfileData->iServiceProfile = + ProfileTypeInfo( iProfileData->iServiceProfileIndex ); + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::ProfileTypeInfo +// Returns the profile setting with the provided index. +// ----------------------------------------------------------------------------- +TSIPProfileTypeInfo& CSIPSettListSIPProfSetModel::ProfileTypeInfo( TInt aIndex ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::ProfileTypeInfo" ) + TInt index; + if ( aIndex <= 0 ) + { + index = 0; + } + else if ( iTypeInfo->Count() <= aIndex ) + { + index = aIndex - 1; + } + else + { + index = aIndex; + } + return ( (*iTypeInfo)[ index ] ); + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::SaveProfileL +// Starts saving the modified settings +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::SaveProfileL() + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::SaveProfileL" ) + StoreServiceProfileSetting(); + iHandler->SaveProfileL(); + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::APUID +// Returns Access Point UID based on the index +// ----------------------------------------------------------------------------- +// +TUint32 CSIPSettListSIPProfSetModel::APUID( const TInt aIndex ) const + { + return iAPsUIDs[aIndex]; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::APUID +// Returns Access Point UID +// ----------------------------------------------------------------------------- +// +TUint32 CSIPSettListSIPProfSetModel::APUID( ) const + { + return iProfileData->iAPIndex; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::SNAPUID +// Returns SNAP UID based on the index +// ----------------------------------------------------------------------------- +// +TUint32 CSIPSettListSIPProfSetModel::SNAPUID( const TInt aIndex ) const + { + return iSNAPUIDs[aIndex]; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::CheckDuplicateNameL +// Checks that given name is not already exists. +// ----------------------------------------------------------------------------- +// +TBool CSIPSettListSIPProfSetModel::CheckDuplicateNameL( TDes& aName ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::CheckDuplicateNameL" ) + TBool ret( EFalse ); + TBuf savedName ( KNullDesC ); + savedName.Copy( aName ); + iHandler->CheckDuplicateNameL( iProfileData->iID, aName ); + + // Return ETrue if name unique. + if ( !savedName.Compare( aName ) ) + { + ret = ETrue; + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::ProfileLocked +// Checks is currently shown profile locked. +// ----------------------------------------------------------------------------- +// +TBool CSIPSettListSIPProfSetModel::ProfileLocked() + { + return iLocked; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::APLocked +// Checks is SNAP is defined and so AP setting is locked. +// ----------------------------------------------------------------------------- +// +TBool CSIPSettListSIPProfSetModel::APLocked() + { + return iAPLocked; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::SetApLocked +// SNAPid defined, lock AP setting. +// ----------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::SetApLocked() + { + iAPLocked = ETrue; + } + +// --------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::IsRegistered +// Profile registration status. +// --------------------------------------------------------------------------- +// +TBool CSIPSettListSIPProfSetModel::IsRegistered() + { + return iRegistered; + } + +// --------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::CleanAPUid +// Remove defined AP UID . +// --------------------------------------------------------------------------- +// +void CSIPSettListSIPProfSetModel::CleanAPUid() + { + iProfileData->iAPIndex = -1; + } + +// ----------------------------------------------------------------------------- +// CSIPSettListSIPProfSetModel::DestinationsCountL +// Gets the destinations count. +// ----------------------------------------------------------------------------- +// +TInt CSIPSettListSIPProfSetModel::DestinationsCountL( ) + { + __GSLOGSTRING("CSIPSettListSIPProfSetModel::DestinationsCountL" ) + TInt count = 0; + + RCmManager cmManager; + cmManager.OpenL(); + CleanupClosePushL(cmManager); + + RArray destinations; + CleanupClosePushL(destinations); + cmManager.AllDestinationsL(destinations); + + count = destinations.Count(); + + CleanupStack::PopAndDestroy(); // destinations + CleanupStack::PopAndDestroy(); // cmManager + + return count; + } +// End of File