--- a/connectionutilities/ConnectionDialogs/cconndlg/src/ActiveSelectExplicit.cpp Thu Aug 19 10:18:49 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,519 +0,0 @@
-/*
-* 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: Implementation of plugins (base & all derived).
-*
-*/
-
-
-// INCLUDE FILES
-#include "ActiveSelectExplicit.h"
-#include "SelectExplicitDialog.h"
-#include "ConnectionInfo.h"
-#include "ConnectionInfoArray.h"
-#include "CConnDlgPrivateCRKeys.h"
-#include "ConnectionDialogsLogger.h"
-#include "sortsnaputils.h"
-
-#include <commdb.h>
-#include <StringLoader.h>
-#include <wlanmgmtcommon.h>
-#include <cmdestinationext.h>
-#include <cmpluginwlandef.h>
-#ifndef __WINS__
-#include <wlanmgmtclient.h>
-#endif
-#include <AknWaitDialog.h>
-#include <AknIconArray.h>
-#include <AknsUtils.h>
-
-#include <CConnDlgPlugin.rsg>
-#include <data_caging_path_literals.hrh>
-#include <cmmanager.mbg>
-#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <commsdat.h>
-#else
-#include <commsdat.h>
-#include <commsdat_partner.h>
-#endif
-#include <wlancontainer.h>
-
-
-// CONSTANTS
-
-LOCAL_D const TInt KMaxEntryLength = CommsDat::KMaxTextLength*2 + 20;
-LOCAL_D const TInt KIconsGranularity = 4;
-
-using namespace CMManager;
-
-
-///////////////////////////////////////////////////////////////////////////////
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::CActiveSelectExplicit()
-// ---------------------------------------------------------
-//
-CActiveSelectExplicit::CActiveSelectExplicit(
- CSelectConnectionDialog* aCallerDialog,
- TUint aDestId,
- TInt aRefreshInterval,
- TUint32 aBearerSet,
- TBool aIsWLANFeatureSupported,
- TUint aDefaultCMId )
-: iCallerDialog( aCallerDialog ),
- iDestId( aDestId ),
-// isDialogDeleting( EFalse ),
- iRefreshInterval( aRefreshInterval ),
- iBearerSet( aBearerSet ),
- iIsWLANFeatureSupported( aIsWLANFeatureSupported ),
- iDefaultCMId( aDefaultCMId )
- {
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit* CActiveSelectExplicit::NewL()
-// ---------------------------------------------------------
-//
-CActiveSelectExplicit* CActiveSelectExplicit::NewL(
- CSelectConnectionDialog* aCallerDialog,
- TUint aDestId,
- TInt aRefreshInterval,
- TUint32 aBearerSet,
- TBool aIsWLANFeatureSupported,
- TUint aDefaultCMId )
- {
- CLOG_ENTERFN( "CActiveSelectExplicit::NewL " );
-
- CActiveSelectExplicit* self = new ( ELeave ) CActiveSelectExplicit(
- aCallerDialog, aDestId, aRefreshInterval,
- aBearerSet, aIsWLANFeatureSupported,
- aDefaultCMId );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- CLOG_LEAVEFN( "CActiveSelectExplicit::NewL " );
-
- return self;
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::ConstructL()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::ConstructL()
- {
- CActiveBase::ConstructL();
-
- iItems = new( ELeave ) CConnectionInfoArray();
- iIcons = new( ELeave ) CAknIconArray( KIconsGranularity );
-
- iCmManagerExt.OpenL();
- }
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::~CActiveSelectExplicit()
-// ---------------------------------------------------------
-//
-CActiveSelectExplicit::~CActiveSelectExplicit()
- {
- Cancel();
-
- if ( iItems )
- {
- iItems->ResetAndDestroy();
- }
- delete iItems;
- iItems = NULL;
-
- iCmManagerExt.Close();
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::Cancel()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::Cancel()
- {
- StopTimer();
- CActive::Cancel();
-
- if( iDialog && !( iDialog->GetOkToExit() ) )
- {
- CLOG_WRITEF( _L( "iDialog->GetOkToExit() : %b" ), iDialog->GetOkToExit() );
- delete iDialog;
- iDialog = NULL;
- }
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::DoCancel()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::DoCancel()
- {
- CLOG_ENTERFN( "CActiveSelectExplicit::DoCancel " );
-
-/* if( isDialogDeleting )
- {
- CLOG_WRITE( "isDialogDeleting" );
-
- delete iDialog;
- iDialog = NULL;
-
- isDialogDeleting = EFalse;
- }
- */
- CLOG_LEAVEFN( "CActiveSelectExplicit::DoCancel " );
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::RunL()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::RunL()
- {
- CLOG_ENTERFN( "CActiveSelectExplicit::RunL " );
-
- if( iStatus == KErrNone )
- {
- BuildConnectionListL();
- iDialog->RefreshDialogL( iItems, iIcons, ETrue );
- }
-
- CLOG_LEAVEFN( "CActiveSelectExplicit::RunL " );
-
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::StartSearchIAPsL()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::ShowSelectExplicitL()
- {
- BuildConnectionListL();
-
- iDialog = CSelectExplicitDialog::NewL( iCallerDialog );
- iDialog->PrepareAndRunLD( iItems, iIcons, EFalse );
-
- if( iRefreshInterval )
- {
- StartTimerL( iRefreshInterval );
- }
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::BuildConnectionListL()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::BuildConnectionListL()
- {
- CLOG_ENTERFN( "CActiveSelectExplicit::BuildConnectionListL " );
-
- if ( iItems )
- {
- iItems->ResetAndDestroy();
- }
-
- if ( iIcons )
- {
- iIcons->ResetAndDestroy();
- }
-
- if ( iDefaultCMId != 0 )
- { // It automatically means also that the feature is supported
- _LIT( KDriveZ, "z:" ); // ROM folder
- // Name of the MBM file containing icons
- _LIT( KManagerIconFilename, "cmmanager.mbm" );
-
- TFileName iconsFileName;
-
- iconsFileName.Append( KDriveZ );
- iconsFileName.Append( KDC_APP_BITMAP_DIR );
- iconsFileName.Append( KManagerIconFilename );
-
- iIcons->AppendL( AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
- KAknsIIDQgnIndiCbHotAdd,
- iconsFileName,
- EMbmCmmanagerQgn_indi_cb_hot_add,
- EMbmCmmanagerQgn_indi_cb_hot_add_mask ) );
- }
-
- TBool easyWlanIsInDb = EFalse;
-
-#ifdef _DEBUG
- if ( iDestId )
- { // Real destination, not for uncategorized
- RCmDestinationExt cmDestExt = iCmManagerExt.DestinationL( iDestId );
- CleanupClosePushL( cmDestExt );
- CLOG_WRITEF( _L( "Destination id %d, Total number of methods %d" ),
- iDestId, cmDestExt.ConnectionMethodCount() );
-
- for ( TInt j = 0; j < cmDestExt.ConnectionMethodCount(); j++ )
- {
- RCmConnectionMethodExt cmConnMethodExt;
- TRAPD( err, cmConnMethodExt = cmDestExt.ConnectionMethodL( j ) );
- if ( err == KErrNone )
- {
- CleanupClosePushL( cmConnMethodExt );
- HBufC* bufMethod = cmConnMethodExt.GetStringAttributeL(
- ECmName );
- CleanupStack::PushL( bufMethod );
- TBuf<CommsDat::KMaxTextLength+1> nameMethod;
- nameMethod = *bufMethod;
- nameMethod.ZeroTerminate();
-
- CLOG_WRITEF( _L( "ConnMethod id %d, Method name %s" ),
- cmConnMethodExt.GetIntAttributeL( ECmIapId ), nameMethod.Ptr() );
-
- CleanupStack::PopAndDestroy( 2 ); // bufMethod, cmConnMethodExt
- }
- }
- CleanupStack::PopAndDestroy(); // cmDestExt
- }
-#endif
- TSortSnapUtils sortSnapUtils( iMPM );
- TMpmSnapBuffer snapBuffer;
- TInt err = sortSnapUtils.GetSortSnapData( iDestId, snapBuffer );
- CLOG_WRITEF( _L( "GetSortSNAPDataL returned = %d. list.Count() = %d" ), err, snapBuffer.Count() );
-
- if ( err == KErrNone )
- {
- RCmConnectionMethodExt cmConnMethodExt;
- CleanupClosePushL( cmConnMethodExt );
- for ( TInt numCM = 0; numCM < snapBuffer.Count(); numCM++ )
- {
- AddConnectionMethodItemL( snapBuffer.iIapId[numCM],
- iDestId == 0,
- easyWlanIsInDb,
- snapBuffer.iIapId[numCM] == iDefaultCMId );
- }
- CleanupStack::PopAndDestroy(); // cmConnMethodExt
- }
-
- // Add any ad-hoc WLAN iaps to the list
- if ( ( iBearerSet & ECommDbBearerWLAN ) && ( iDestId == 0 ) && iIsWLANFeatureSupported )
- {
- AddAdhocWlanIapsL();
- }
-
- CLOG_LEAVEFN( "CActiveSelectExplicit::BuildConnectionListL " );
- }
-
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::AddConnectionMethodItemL()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::AddConnectionMethodItemL( TUint32 aId,
- TBool aCheckForEasyWlan,
- TBool& aEasyWlanIsInDb,
- TBool aDefaultCM )
- {
- CLOG_ENTERFN( "CActiveSelectExplicit::AddConnectionMethodItemL" );
-
- CConnectionInfo* conIn;
-
- RCmConnectionMethodExt cmConnMethodExt;
- CLOG_WRITEF( _L( "Uncat dest id %d" ), aId );
-
- TRAPD( err, cmConnMethodExt = iCmManagerExt.ConnectionMethodL( aId ) );
- CLOG_WRITEF( _L( "err %d" ), err );
-
- if ( err == KErrNone )
- {
- CleanupClosePushL( cmConnMethodExt );
-
- TUint32 bearer = cmConnMethodExt.GetIntAttributeL(
- ECmCommsDBBearerType );
- CLOG_WRITEF( _L( "bearer %d" ), bearer );
-
- if ( bearer & iBearerSet )
- {
- CLOG_WRITE( "To be listed!" );
-
- TBool isCMEasyWlan = EFalse;
-
- HBufC* bufName = cmConnMethodExt.GetStringAttributeL(
- ECmName );
-
- TBuf<CommsDat::KMaxTextLength+1> nameCM;
- nameCM = *bufName;
- nameCM.ZeroTerminate();
- delete bufName;
-
- CLOG_WRITEF( _L( "Method name %s. Bearer = %d" ), nameCM.Ptr(), bearer );
-
- if ( aCheckForEasyWlan && bearer == KCommDbBearerWLAN &&
- iIsWLANFeatureSupported )
- {
- if ( !aEasyWlanIsInDb )
- {
- HBufC* bufSSID = cmConnMethodExt.GetStringAttributeL(
- EWlanSSID );
- if ( !bufSSID || bufSSID->Des().Length() == 0 )
- {
- isCMEasyWlan = ETrue;
- aEasyWlanIsInDb = ETrue;
- }
- delete bufSSID;
- }
- }
-
- if ( !isCMEasyWlan )
- {
- CGulIcon* iconCM = ( CGulIcon* )
- cmConnMethodExt.GetIntAttributeL(
- ECmBearerIcon );
- if ( iconCM )
- {
- CLOG_WRITEF( _L( "iconCM found" ) );
- CleanupStack::PushL( iconCM );
- iIcons->AppendL( iconCM );
-
- // icon array took over ownership
- CleanupStack::Pop( iconCM );
- }
- else
- {
- CLOG_WRITEF( _L( "iconCM not found" ) );
- }
-
- TBuf<KMaxEntryLength> temp;
- _LIT( KIconIdName, "%d\t%s" );
- _LIT( KIconIdNameDefaultConn, "%d\t%s\t0" );
-
- if ( aDefaultCM )
- {
- temp.Format( KIconIdNameDefaultConn, iIcons->Count()-1,
- nameCM.Ptr() );
- }
- else
- {
- temp.Format( KIconIdName, iIcons->Count()-1,
- nameCM.Ptr() );
- }
-
- conIn = CConnectionInfo::NewL( aId, 0, temp );
- CleanupStack::PushL( conIn );
- iItems->AppendL( conIn );
- CleanupStack::Pop( conIn );
- }
- }
- CleanupStack::PopAndDestroy(); // cmConnMethodExt
- }
-
- CLOG_LEAVEFN( "CActiveSelectExplicit::AddConnectionMethodItemL" );
- }
-
-// ---------------------------------------------------------
-// CActiveSelectExplicit::AddAdhocWlanIapsL()
-// ---------------------------------------------------------
-//
-void CActiveSelectExplicit::AddAdhocWlanIapsL()
- {
- CLOG_ENTERFN( "CActiveSelectExplicit::AddAdhocWlanIapsL " );
-
- // Creating a session with the latest version
- CMDBSession* db = CMDBSession::NewLC( CMDBSession::LatestVersion() );
- db->SetAttributeMask( ECDProtectedWrite );
-
- // Create wlan service record set (RArray (or RPtrArray?))
- CMDBRecordSet<CCDWlanServiceRecord>* wlanSet =
- new (ELeave)CMDBRecordSet<CCDWlanServiceRecord>( CCDWlanServiceRecord::TableIdL( *db ) );
- CleanupStack::PushL( wlanSet );
-
- // Create wlan service record
- CCDWlanServiceRecord* wlanRecord =
- new (ELeave)CCDWlanServiceRecord( CCDWlanServiceRecord::TableIdL( *db ) );
-
- CleanupStack::PushL( wlanRecord );
-
- // Set ConnectionMode field in wlan service record (see wlancontainer.h)
- // This works with EWlanOperatingModeAdhoc, fails with EWlanConnectionModeAdhoc
- wlanRecord->iWlanConnMode.SetL( EWlanOperatingModeAdhoc );
-
- // Append wlan service record to wlan service record set (currently empty)
- wlanSet->iRecords.AppendL( wlanRecord );
- CleanupStack::Pop( wlanRecord ); // ownership moved to RPointerArray
-
- // Find matcing wlan service records
- if( wlanSet->FindL( *db ) )
- {
- TInt wlanRecordCount( wlanSet->iRecords.Count() );
- CLOG_WRITEF( _L("wlanSet record count = %d"), wlanRecordCount );
-
- TBool easyWlanIsInDb = EFalse;
-
- // loop for each record found
- for ( TInt i = 0; i < wlanRecordCount; i++ )
- {
- // Seems we need to specifically load the current record again to be sure all fields are up to date
- wlanRecord->SetElementId( wlanSet->iRecords[i]->ElementId() );
- // Load will only look at ElementId and updates the rest of the fields
- wlanRecord->LoadL( *db );
-
- if ( !( wlanRecord->iWLanSSID.IsNull() ) )
- {
- // Don't include Easy WLAN
- // lets print some stuff to log
- CLOG_WRITEF( _L("New ad-hoc WLAN IAP:" ));
- CLOG_WRITEF( _L(" iWlanServiceId = %d"), static_cast<TUint>( wlanRecord->iWlanServiceId ) );
- CLOG_WRITEF( _L(" iWlanConnMode = %d"), static_cast<TUint>( wlanRecord->iWlanConnMode ) );
- CLOG_WRITEF( _L(" iWLanSSID = %S"), &(static_cast<TDesC>( wlanRecord->iWLanSSID ) ) );
-
- // Create an iap record
- CCDIAPRecord* iapRecord = static_cast<CCDIAPRecord*> (
- CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
- CleanupStack::PushL( iapRecord );
-
- iapRecord->iServiceType.SetL( TPtrC( KCDTypeNameLANService ) );
- // Set the service field to the same value as in the wlan service record we are currently looking
- iapRecord->iService = wlanRecord->iWlanServiceId;
- // Find the matching iap record
- if( iapRecord->FindL( *db ) )
- {
- TUint iapId( 0 );
-
- // read the iap id
- iapId = iapRecord->RecordId();
- CLOG_WRITEF( _L(" iapId = %d"), iapId );
-
- AddConnectionMethodItemL( iapId,
- iDestId == 0,
- easyWlanIsInDb,
- iapId == iDefaultCMId );
- }
- CleanupStack::PopAndDestroy( iapRecord );
- }
- }
- }
- else
- {
- CLOG_WRITEF( _L("no matcing wlan records found." ));
- }
-
- CleanupStack::PopAndDestroy( wlanSet );
- CleanupStack::PopAndDestroy( db );
-
- CLOG_LEAVEFN( "CActiveSelectExplicit::AddAdhocWlanIapsL" );
- }
-
-// End of File