sipplugins/sippsipsettingsui/src/sipsettlistsipprofsetmodel.cpp
changeset 0 307788aac0a8
--- /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    <aknsettingitemlist.h>
+#include    <commdb.h>
+#include    <eikenv.h>
+#include    <eikappui.h>
+#include    <StringLoader.h>
+#include    <gssipsettingspluginrsc.rsg> //GUI Resource
+#include    <featmgr.h>
+#include    <cmmanager.h>
+#include    <cmdestination.h>
+#include    <cmconnectionmethoddef.h>
+#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<CSIPManagedProfile>* 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<CAknEnumeratedText>* 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<CAknEnumeratedText>* aArray,
+    TInt& aIndex )
+    {
+    __GSLOGSTRING("CSIPSettListSIPProfSetModel::GetDestinationsListL Start" )
+    iSNAPUIDs.Reset();
+
+    RCmManager cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL(cmManager);
+    
+    RArray<TUint32> 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<CAknEnumeratedText>* 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<KMaxSIPProviderNameLength> 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<TUint32> destinations;
+    CleanupClosePushL(destinations);
+    cmManager.AllDestinationsL(destinations);
+    
+    count = destinations.Count();
+    
+    CleanupStack::PopAndDestroy(); // destinations
+    CleanupStack::PopAndDestroy(); // cmManager
+    
+    return count;
+    }
+//  End of File