--- a/cmmanager/cmmgr/Framework/Src/cmwizard.cpp Fri Apr 16 15:21:37 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,487 +0,0 @@
-/*
-* Copyright (c) 2006 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: Wizard used for adding connection methods
-*
-*/
-
-#include <AknWaitDialog.h>
-#include <cmmanager.rsg>
-#include <StringLoader.h>
-#include <avkon.hrh>
-#include "cmwizard.h"
-#include <cmcommonconstants.h>
-#include <cmcommonui.h>
-#include "cmdestinationimpl.h"
-#include "cmlogger.h"
-#include "cmmanagerimpl.h"
-#include <cmpluginbaseeng.h>
-#include <cmpluginbase.h>
-#include "selectdestinationdlg.h"
-
-using namespace CMManager;
-
-// ---------------------------------------------------------------------------
-// CCmWizard::CCmWizard
-// ---------------------------------------------------------------------------
-//
-CCmWizard::CCmWizard( CCmManagerImpl& aCmManager )
- : iCmManager( aCmManager )
- {
- CLOG_CREATE;
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::~CCmWizard
-// ---------------------------------------------------------------------------
-//
-CCmWizard::~CCmWizard()
- {
- if( iCheckConnDlg )
- {
- delete iCheckConnDlg;
- }
- CLOG_CLOSE;
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::CreateConnectionMethodL
-// ---------------------------------------------------------------------------
-//
-TInt CCmWizard::CreateConnectionMethodL
- ( CCmDestinationImpl* aTargetDestination )
- {
- TInt index( KErrCancel );
-
- LOGGER_ENTERFN( "CCmWizard::CreateConnectionMethodL" );
- TBool wizardCancelled = EFalse; // indicates if the wizard has got cancelled
- TUint32 bearerType = 0;
- TBool manuallyConfigure ( EFalse );
-
- if ( AutoCheckForCmsL() )
- {
- RArray<TUint32> availableBearers( KCmArrayMediumGranularity );
- CleanupClosePushL( availableBearers );
-
- CLOG_WRITE( "CCmWizard::Starting CheckForCms" );
- CheckForCmsL( availableBearers );
-
- // If user has cancelled the dialog, then (s)he wanted to terminate
- // the whole procedure.
- if ( iCheckConnDlgCancelled )
- {
- CLOG_WRITE( "CCmWizard::wizardCancelled" );
- wizardCancelled = ETrue;
- }
- else
- {
- // If there's coverage for at least one of the bearer types
- if ( availableBearers.Count() )
- {
- CLOG_WRITE_1( "CCmWizard::CreateConnectionMethodL av. bearers: [%d]",
- availableBearers.Count() );
- // Show available conn methods in a list from which user has to
- // select.
- bearerType = TCmCommonUi::ShowAvailableMethodsL
- ( availableBearers,
- iCmManager );
- if ( !bearerType )
- {
- wizardCancelled = ETrue;
- CLOG_WRITE( "CCmWizard::wizardCancelled" );
- }
- }
- else // no coverage at all
- {
- CLOG_WRITE( "CCmWizard::CreateConnectionMethodL no available bearers, manual selection." );
- // "Do you want to configure conn methods manually?"
- if ( ManualCheckForCmsL() )
- {
- // Yes, select a bearer manually
- bearerType = TCmCommonUi::SelectBearerL( iCmManager );
- if ( !bearerType )
- {
- // Cancelled dialog
- wizardCancelled = ETrue;
- }
- else
- {
- manuallyConfigure = ETrue;
- }
- }
- else
- {
- // No, user has cancelled the dialog
- wizardCancelled = ETrue;
- }
- }
- }
-
- CleanupStack::PopAndDestroy( &availableBearers );
- }
- else // "No" for checking conn methods automatically
- {
- CLOG_WRITE( "CCmWizard::AutoCheckForCmsL returned FALSE" );
- // Manual bearer selection
- bearerType = TCmCommonUi::SelectBearerL( iCmManager );
- if ( !bearerType )
- {
- // Cancelled dialog
- wizardCancelled = ETrue;
- }
- else
- {
- manuallyConfigure = ETrue;
- }
- }
-
- if ( !wizardCancelled )
- {
- CCmPluginBase* plugin = iCmManager.CreateConnectionMethodL(
- bearerType, aTargetDestination );
- CleanupStack::PushL( plugin );
-
- CLOG_WRITE( "CCmWizard::CreateConnectionMethodL plugin created, starting initialization" );
-
- // Bearer-specific UI-supported initialization is done by plug-ins
- TBool ret = EFalse;
- TRAPD(err, ret = plugin->InitializeWithUiL( manuallyConfigure ) );
- if ( err == KErrNone && ret )
- {
- CCmDestinationImpl* targetDest = aTargetDestination;
- // If target destination is not yet specified...
- if ( !aTargetDestination )
- {
- // For virtual bearers: eliminated the underlying destination
- // from the destination selection dialog
- TUint32 targetDestId( 0 );
-
- RArray<TUint32> destArray( iCmManager.DestinationCountL() );
- CleanupClosePushL( destArray );
- iCmManager.AllDestinationsL( destArray );
- // now do the filtering
- plugin->FilterPossibleParentsL( destArray );
-
- if ( !destArray.Count() )
- {
- // there are no destinations to put the CM into
- TCmCommonUi::ShowNoteL( R_CMWIZARD_NO_VPN_STACKING,
- TCmCommonUi::ECmErrorNote );
-
- CleanupStack::PopAndDestroy( &destArray );
- CleanupStack::PopAndDestroy( plugin );
-
- CLOG_WRITE_1( "CCmWizard::CreateConnectionMethodL no valid parents after filtering, index: [%d]", index );
- return index;
- }
-
- // ... then let the user select a destination.
- CSelectDestinationDlg* dlg = CSelectDestinationDlg::NewL( targetDestId,
- iCmManager,
- &destArray );
- dlg->ExecuteLD( R_CMMANAGER_LIST_QUERY_WITH_MSGBOX );
-
- CleanupStack::PopAndDestroy( &destArray );
-
- if ( targetDestId )
- {
- // CREATE an object based on an ID.
- targetDest = iCmManager.DestinationL( targetDestId );
- CleanupStack::PushL( targetDest );
- }
- }
-
- CLOG_WRITE_1( "CCmWizard::CreateConnectionMethodL target dest: [0x%x]",
- targetDest );
-
- // If the target destination is still unspecified at this point,
- // then the only reason could be that the previous dialog was
- // cancelled ==> do something only if we have the target
- // destination
- if ( targetDest )
- {
- plugin->UpdateL(); // commit changes
-
- index = iCmManager.CopyConnectionMethodL( *targetDest,
- *plugin );
-
- RArray<TUint32> additionalCms;
- CleanupClosePushL (additionalCms);
- plugin->GetAdditionalUids( additionalCms );
- if ( additionalCms.Count() )
- {//if there are additional cms created, move them to the target destination as well
- for ( TInt i = 0; i<additionalCms.Count(); i++)
- {
- CCmPluginBase* cm = iCmManager.GetConnectionMethodL( additionalCms[i] );
- CleanupStack::PushL(cm);
- iCmManager.CopyConnectionMethodL( *targetDest,
- *cm );
- CleanupStack::PopAndDestroy( cm );
- }
- }
- CleanupStack::PopAndDestroy( &additionalCms );
-
- HBufC* destName = targetDest->NameLC();
-
- TCmCommonUi::ShowNoteL( R_CMWIZARD_NEW_METHOD_ADDED,
- *destName,
- TCmCommonUi::ECmOkNote );
-
- CleanupStack::PopAndDestroy( destName );
-
- // Here's a tricky one: if 'aTargetDestination' was NULL, then
- // I had to create 'targetDest' myself (with
- // iCmManager.DestinationL), consequently I have to
- // free it up, too.
- if ( !aTargetDestination )
- {
- CleanupStack::PopAndDestroy( targetDest );
- }
- }
- else // Wi-Fi may have set IAP in database. So, delete it.
- {
- CLOG_WRITE( "CCmWizard::CreateConnectionMethodL, handling cancel add destination -- start" );
- RArray<TUint32> additionalCms;
- CleanupClosePushL (additionalCms);
-
- plugin->GetAdditionalUids( additionalCms );
- CLOG_WRITE_1( "CCmWizard::CreateConnectionMethodL, addtionalCms count [%d]", additionalCms.Count() );
- for ( TInt i = 0; i<additionalCms.Count(); i++)
- {
- CCmPluginBase* cm = iCmManager.GetConnectionMethodL( additionalCms[i] );
- CleanupStack::PushL(cm);
- cm->DeleteL( ETrue );
- CleanupStack::PopAndDestroy( cm );
- }
- // If plugin hasn't got Iap Id, it's "normal" CM which has not been saved
- // into CommsDat yet. Otherwise it's Wifi CM and has to be deleted by using
- // DeleteL() method.
- if( plugin->GetIntAttributeL( ECmIapId ) )
- {
- plugin->DeleteL( ETrue );
- }
-
- CleanupStack::PopAndDestroy( &additionalCms );
- CLOG_WRITE( "CCmWizard::CreateConnectionMethodL, handling cancel add destination -- end" );
- }
- }
- CleanupStack::PopAndDestroy( plugin );
- }
-
- return index;
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::DialogDismissedL
-// ---------------------------------------------------------------------------
-//
-void CCmWizard::DialogDismissedL( TInt aButtonId )
- {
- LOGGER_ENTERFN( "CCmWizard::DialogDismissedL" );
-
- CLOG_WRITE_1( "CCmWizard::DialogDismissedL, aButtonId: [%d]", aButtonId );
- if ( aButtonId == EAknSoftkeyCancel )
- {
- if ( iCheckConnDlg != NULL )
- {
- CLOG_WRITE( "CCmWizard::CheckConnDlg is not NULL" );
- iCheckConnDlgCancelled = ETrue;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::AutoCheckForCmsL
-// ---------------------------------------------------------------------------
-//
-TBool CCmWizard::AutoCheckForCmsL() const
- {
- LOGGER_ENTERFN( "CCmWizard::AutoCheckForCmsL" );
- // Automatically check for available conn methods?
- TInt retval =
- TCmCommonUi::ShowConfirmationQueryL( R_CMWIZARD_AUTOMATIC_CHECK );
-
- return ( retval == EAknSoftkeyYes || retval == EAknSoftkeyOk )
- ? ETrue : EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::ManualCheckForCmsL
-// ---------------------------------------------------------------------------
-//
-TBool CCmWizard::ManualCheckForCmsL() const
- {
- LOGGER_ENTERFN( "CCmWizard::ManualCheckForCmsL" );
- // Manually configure CMs?
- TInt retval =
- TCmCommonUi::ShowConfirmationQueryL(
- R_CMWIZARD_MANUAL_CONFIGURATION );
-
- return ( retval == EAknSoftkeyYes || retval == EAknSoftkeyOk )
- ? ETrue : EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::CheckForCmsL
-// ---------------------------------------------------------------------------
-//
-void CCmWizard::CheckForCmsL( RArray<TUint32>& aCoverageArray )
- {
- LOGGER_ENTERFN( "CCmWizard::CheckForCmsL" );
- // Show a wait dialog
- iCheckConnDlgCancelled = FALSE;
- iCheckConnDlg = new (ELeave) CAknWaitDialog(
- ( REINTERPRET_CAST( CEikDialog**, &iCheckConnDlg )) );
-
- iCheckConnDlg->SetCallback( this );
-
- iCheckConnDlg->SetTone( CAknNoteDialog::EConfirmationTone );
-
- HBufC* text = StringLoader::LoadLC( R_CMWIZARD_CHECKING_METHODS );
- iCheckConnDlg->SetTextL( *text );
- CleanupStack::PopAndDestroy( text );
-
- iCheckConnDlg->ExecuteLD( R_CMMANAGER_WAIT_NOTE );
-
- RArray<TUint32> bearers( KCmArrayMediumGranularity );
- CleanupClosePushL( bearers );
-
- iCmManager.SupportedBearersL( bearers );
-
- for ( TInt i = 0; i < bearers.Count() && !iCheckConnDlgCancelled; i++ )
- {
- TBool avail( EFalse );
-
- TRAPD( err, avail = iCmManager.GetBearerInfoBoolL( bearers[i], ECmCoverage ) );
-
- CLOG_WRITE_2( "CCmWizard::CheckForCms, bearer [%d] coverage error [%d]", i, err );
-
- if( err )
- {
- continue;
- }
-
-
- if ( avail &&
- iCmManager.GetBearerInfoBoolL( bearers[i], ECmAddToAvailableList ) )
- {
- aCoverageArray.AppendL( bearers[i] );
- CLOG_WRITE_1( "CCmWizard::CheckForCms, bearer [%d] appended", i );
- }
- }
-
- CleanupStack::PopAndDestroy( &bearers );
-
- // Dismiss wait dialog
- if( !iCheckConnDlgCancelled )
- {
- CLOG_WRITE( "CCmWizard::CheckForCms, cancelling wait dlg" );
- iCheckConnDlg->SetCallback( NULL );
- iCheckConnDlg->ProcessFinishedL();
- CLOG_WRITE( "CCmWizard::CheckForCms, wait dialog deleted" );
- }
- else
- {
- CLOG_WRITE( "CCmWizard::CheckForCms, wait dlg was already cancelled" );
- }
-
-
- // Set the member to NULL every case
- iCheckConnDlg = NULL;
- }
-
-
-
-// ---------------------------------------------------------------------------
-// CCmWizard::FindTargetDestinationL
-// ---------------------------------------------------------------------------
-//
-TUint32 CCmWizard::FindTargetDestinationL( CCmPluginBase* aPlugin )
- {
- LOGGER_ENTERFN( "CCmWizard::FindTargetDestinationL" );
-
- // Tries to read the destination id
- TUint32 targetDestId (0);
- TRAPD( err, targetDestId =
- aPlugin->GetIntAttributeL( ECmNextLayerSNAPId ) );
-
- // only supported by virtual bearers, don't leave
- if ( err && err != KErrNotSupported )
- {
- User::Leave( err );
- }
-
- // targetDestId == 0 means that not destination but a connection
- // method have been selected
- if ( targetDestId == 0 )
- {
- // Now the destination containing the connection method
- // should be obtained
- TUint32 targetCmId (0);
- TRAPD( err, targetCmId =
- aPlugin->GetIntAttributeL( ECmNextLayerIapId ) );
-
- // only supported by virtual bearers, don't leave
- if ( err && err != KErrNotSupported )
- {
- User::Leave( err );
- }
-
- targetDestId = FindParentDestinationL( targetCmId );
- }
-
- return targetDestId;
- }
-
-// ---------------------------------------------------------------------------
-// CCmWizard::FindParentDestinationL
-// ---------------------------------------------------------------------------
-//
-TUint32 CCmWizard::FindParentDestinationL( TUint32 aCmId )
- {
- LOGGER_ENTERFN( "CCmWizard::FindParentDestinationL" );
-
- TBool found = EFalse;
- TUint32 targetDestId (0);
-
- RArray<TUint32> destinations;
-
- iCmManager.AllDestinationsL( destinations );
- CleanupClosePushL( destinations );
-
- RArray<TUint32> cms;
-
- for ( TInt i = 0; i < destinations.Count() && !found; i++ )
- {
- CCmDestinationImpl* dest =
- iCmManager.DestinationL( destinations[i] );
- CleanupStack::PushL( dest );
- dest->ConnectMethodIdArrayL( cms );
- CleanupClosePushL( cms );
-
- for ( TInt j = 0; j < cms.Count() && !found; j++ )
- {
- if( cms[j] == aCmId)
- {
- targetDestId = destinations[i];
- found = ETrue;
- }
- }
- CleanupStack::PopAndDestroy( &cms );
- CleanupStack::PopAndDestroy( dest );
- }
-
- CleanupStack::PopAndDestroy( &destinations );
-
- return targetDestId;
- }