wlanutilities/wlansniffer/aiplugin/src/wsfaiplugin.cpp
changeset 0 56b72877c1cb
child 8 c2bc3f8c7777
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/aiplugin/src/wsfaiplugin.cpp	Thu Dec 17 09:20:28 2009 +0200
@@ -0,0 +1,1057 @@
+/*
+* Copyright (c) 2007-2008 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 CWsfAiPlugin
+*
+*/
+
+//  EXTERNAL INCLUDES
+#include <aicontentobserver.h>
+#include <aiutility.h>
+#include <apgcli.h>
+#include <wsfaipluginrsc.rsg>
+
+#include <e32std.h>
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+
+#include <f32file.h>
+#include <AknsConstants.h>
+#include <AknUtils.h>
+#include <StringLoader.h>
+#include <bautils.h>
+#include <avkon.rsg>
+#include <apgtask.h>
+#include <eiklabel.h>
+
+#include <data_caging_path_literals.hrh> // KDC_APP_BITMAP_DIR
+
+//  INTERNAL INCLUDES
+#include "wsfaiplugin.h"
+#include "wsfaipluginuids.hrh"
+#include "wsfaiplugincontentmodel.h"
+#include "wsfaimodel.h"
+#include "wsfmodel.h"
+#include "wsfaiview.h"
+#include "wsficonarraycreator.h"
+#include "wsfdbobserver.h"
+#include "wsflogger.h"
+
+
+// define icon id for Navigation Bar icon
+LOCAL_D const TInt KNaviBarIcon = EWlanOffIcon;
+LOCAL_D const TInt KTransparentIcon = ETransparentIcon;
+LOCAL_D const TUid KUidSnifferApp = {0x10281CAA};
+LOCAL_D const TInt KRefreshStepTime = 200 * 1000;
+LOCAL_D const TInt KConnectingStepTime = 200 * 1000;
+_LIT8( KWlanWizardName, "WLANWizard" );
+
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::NewL
+// --------------------------------------------------------------------------
+//
+CWsfAiPlugin* CWsfAiPlugin::NewL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::NewL" );
+    CWsfAiPlugin* self = new (ELeave) CWsfAiPlugin;
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::~CWsfAiPlugin
+// --------------------------------------------------------------------------
+//
+CWsfAiPlugin::~CWsfAiPlugin()
+    {
+    // Cancel periodic animation update
+    if ( iAnimationPeriodic )
+        {
+        LOG_WRITE( "Cancel animation update" );
+        iAnimationPeriodic->Cancel();
+        delete iAnimationPeriodic;
+        iAnimationPeriodic = NULL;
+        }
+    
+    delete iDbObserver;
+    
+    // Cancel start up refresh
+    if ( iStartupRefresh )
+        {
+        LOG_WRITE( "Cancel start up refresh" );
+        iStartupRefresh->Cancel();
+        delete iStartupRefresh;
+        iStartupRefresh = NULL;
+        }
+    
+    delete iModel;
+    delete iAiModel;
+    delete iUi;
+
+    delete iCurrentSignalStrength;
+    delete iCurrentSecureInfo;
+    
+    if ( iWlanTitle )
+        {
+        delete iWlanTitle;
+        }
+    
+    if ( iMskActivate )
+        {
+        delete iMskActivate;
+        }
+    
+    if ( iConnectedTo )
+        {
+        delete iConnectedTo;
+        }
+    
+    if ( iKnownNetworkFound )
+        {
+        delete iKnownNetworkFound;
+        }
+    
+    CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset );
+
+    iObservers.Close();
+
+    Release( iContent );
+    Release( iEvents );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::CWsfAiPlugin
+// --------------------------------------------------------------------------
+//
+CWsfAiPlugin::CWsfAiPlugin()
+    {
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::ConstructL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::ConstructL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::ConstructL" );
+    AllocateResourcesL();
+        
+    iInfo.iUid = KUidWlanWizardPlugin;
+    iInfo.iName.Copy( KWlanWizardName );
+    
+    iContent = AiUtility::CreateContentItemArrayIteratorL( 
+                                                    KAiWizardContent );
+    iEvents = AiUtility::CreateContentItemArrayIteratorL( KAiWizardEvents );
+    
+    // create the engine first...
+    iModel = CWsfModel::NewL( iController, EFalse );
+
+    // then model
+    iAiModel = CWsfAiModel::NewL();
+    iUi = CWsfAiView::NewL( *this );
+    iStartupRefresh = new (ELeave) CAsyncCallBack( 
+                                          TCallBack( StartupRefresh, this ), 
+                                          CActive::EPriorityIdle );
+    iDbObserver = CWsfDbObserver::NewL();
+    iController.SetUi( *static_cast<CWsfAiView*>( iUi ) );
+    iController.InitializeL( iModel, iAiModel, iDbObserver );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::PublishContentL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::PublishContentL( CArrayFix<TInt>* aPublishIconArray, 
+                                    CEikLabel* aText1 )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::PublishContentL" );
+    TInt leftBoundary( 0 );
+    TInt rightBoundary( 0 );
+    TChar boundary('\'');
+    HBufC* localCurrentStatusText( NULL );
+    HBufC* localCurrentTypeText( NULL );
+    
+    HBufC* localCurrentNetworkStatus( NULL );
+    HBufC* localCurrentNetworkName( NULL );
+
+    HBufC* localFullText = ( aText1->Text() )->AllocLC();
+
+    // Locate ' chars from the full string
+    TPtrC fullText = localFullText->Des();
+    leftBoundary = fullText.Locate( boundary );    // char = '
+    rightBoundary = fullText.LocateReverse( boundary );
+
+    // if we have status name then we parse it
+    if ( leftBoundary != rightBoundary && 
+         leftBoundary != KErrNotFound && 
+         rightBoundary != KErrNotFound )
+        {
+        TPtrC begin = fullText.Mid( leftBoundary, 
+                                    rightBoundary - leftBoundary + 1 );
+        localCurrentStatusText = begin.AllocLC();
+        localCurrentNetworkName = begin.AllocLC();
+
+        TPtrC end = fullText.Mid( rightBoundary + 1 );
+        localCurrentTypeText = end.AllocLC();
+       }
+    else
+        {
+        localCurrentStatusText = fullText.AllocLC();
+        delete localCurrentTypeText;
+        localCurrentTypeText = NULL;
+        }
+    
+    //Connected
+    if ( localCurrentNetworkName )
+        {
+        if ( iAiModel->Connected() )
+            {
+            if ( !iConnectedTo )
+                {
+                iConnectedTo = StringLoader::LoadL( 
+                        R_QTN_SNIFFER_PLUG_IN_CONNECTED_TO );
+                }
+            localCurrentNetworkStatus = iConnectedTo;
+            }
+        else
+            {
+            if ( !iKnownNetworkFound )
+                {
+                iKnownNetworkFound = StringLoader::LoadL( 
+                        R_QTN_SNIFFER_PLUG_IN_WLAN_NETWORK_FOUND );
+                }
+            localCurrentNetworkStatus = iKnownNetworkFound;
+            }
+        }
+    else
+        {
+        localCurrentNetworkStatus = localCurrentStatusText;
+        }
+
+    TBool published( EFalse );
+    TInt iconId( 0 );
+
+    ClearL();   // Clear all WLAN Wizard content from the AI2
+
+    for ( iCurrentObserverIndex = 0; 
+          iCurrentObserverIndex < iObservers.Count(); 
+          ++iCurrentObserverIndex )
+        {
+        MAiContentObserver* observer = iObservers[iCurrentObserverIndex];
+        observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+        // make sure we cancel the tracsaction if leaves
+        CleanupStack::PushL( TCleanupItem( PublishCleanup, this ) );
+
+        // Publish Full Text if Classic or Navigation Bar Classic used
+        if ( localFullText )
+            {
+            published = PublishText( observer, 
+                                     EAiWizardContentFullText,
+                                     *localFullText ) || published;
+            }
+
+        // Publish Navigation Bar Icon: EAiWizardContentNaviBarIcon
+        published = PublishIconL( observer, 
+                                  EAiWizardContentNaviBarIcon,
+                                  KNaviBarIcon ) || published;
+
+        // Publish Application Title: EAiWizardContentTitleText
+        if ( !iWlanTitle )
+            {
+            iWlanTitle = StringLoader::LoadL( R_QTN_AI_WIZARD_TITLE );
+            }
+        if ( iWlanTitle )
+            {
+            published = PublishText( observer, 
+                                     EAiWizardContentTitleText,
+                                     *iWlanTitle ) || published;
+            }
+
+        if ( localCurrentStatusText )
+            {
+            // Publish Status icon: EAiWizardContentStatusIcon
+            iconId = aPublishIconArray->At( 0 );
+            published = PublishIconL( observer, 
+                                      EAiWizardContentStatusIcon,
+                                      iconId ) || published;
+            
+            // Publish Status text: EAiWizardContentStatusText
+            published = PublishText( observer, 
+                                     EAiWizardContentStatusText,
+                                     *localCurrentStatusText ) || published;
+            }
+
+        if ( localCurrentTypeText )
+            {
+            // Publish Type icon: EAiWizardContentTypeIcon
+            published = PublishIconL( observer, 
+                                      EAiWizardContentTypeIcon,
+                                      KTransparentIcon ) || published;
+
+            // Publish Type text: EAiWizardContentTypeText
+            published = PublishText( observer, 
+                                     EAiWizardContentTypeText,
+                                     *localCurrentTypeText ) || published;
+            }
+
+        // Publish Strength icon: EAiWizardContentStrengthIcon
+        iconId = aPublishIconArray->At( 2 );
+        published = PublishIconL( observer, 
+                                  EAiWizardContentStrengthIcon,
+                                  iconId ) || published;
+
+        // Publish Strength text: EAiWizardContentStrengthText
+        if ( iCurrentSignalStrength && iScanState )
+            {
+            published = PublishText( observer, 
+                                     EAiWizardContentStrengthText,
+                                     *iCurrentSignalStrength ) || published;
+            }
+
+        // Publish Secure icon: EAiWizardContentSecureIcon
+        iconId = aPublishIconArray->At( 1 );
+        published = PublishIconL( observer, 
+                                  EAiWizardContentSecureIcon,
+                                  iconId ) || published;
+
+        // Publish Secure text: EAiWizardContentSecureText
+        if ( iCurrentSecureInfo && iScanState )
+            {
+            published = PublishText( observer, 
+                                     EAiWizardContentSecureText,
+                                     *iCurrentSecureInfo ) || published;
+            }
+        
+        if ( localCurrentNetworkName )
+            {
+            // Publish NetworkName text: EAiWizardContentNetworkName
+            published = PublishText( observer, 
+                                     EAiWizardContentNetworkName,
+                                     *localCurrentNetworkName ) || published;
+            }
+        
+        if ( localCurrentNetworkStatus )
+            {
+            // Publish NetworkName text: EAiWizardContentNetworkName
+            published = PublishText( observer, 
+                                     EAiWizardContentNetworkStatus,
+                                     *localCurrentNetworkStatus ) || published;
+            }
+        
+        // If we published something then commit, 
+        // otherwise cancel transaction
+        if ( published )
+            {
+            observer->Commit( reinterpret_cast<TInt32>( this ) );
+            published = EFalse;
+            }
+        else
+            {
+            observer->CancelTransaction( reinterpret_cast<TInt32>( this ) );
+            }
+        CleanupStack::Pop( 1 ); // PublishCleanup()
+        }
+    
+    if ( localCurrentTypeText ) 
+        {
+        CleanupStack::PopAndDestroy( localCurrentTypeText );
+        }
+    
+    if ( localCurrentNetworkName ) 
+        {
+        CleanupStack::PopAndDestroy( localCurrentNetworkName );
+        }
+    
+    if ( localCurrentStatusText ) 
+        {
+        CleanupStack::PopAndDestroy( localCurrentStatusText );
+        }
+
+    CleanupStack::PopAndDestroy( localFullText );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::AllocateResourcesL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::AllocateResourcesL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::AllocateResourcesL" );
+    // create resourcefile 
+    CCoeEnv* env = CCoeEnv::Static();
+    TFindFile finder( env->FsSession() );
+    CDir* fileEntries;
+    User::LeaveIfError( finder.FindWildByDir( KResourceFile, 
+                                              KDC_RESOURCE_FILES_DIR, 
+                                              fileEntries ) );
+    
+    TParse pathParse;
+    pathParse.Set( (*fileEntries)[0].iName, &finder.File(), NULL ); 
+    
+    TFileName resourceFile = pathParse.FullName();
+    delete fileEntries;
+
+    BaflUtils::NearestLanguageFile( env->FsSession(), resourceFile );
+    iResourceFileOffset = env->AddResourceFileL( resourceFile );    
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::Resume
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::Resume( TAiTransitionReason aReason )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::Resume" );
+    switch ( aReason ) 
+        {
+        case EAiSystemStartup:
+            {
+            LOG_WRITE( "Resume - EAiSystemStartup");
+            iStartupRefresh->CallBack();
+            break;
+            }
+            
+        case EAiIdleForeground: 
+            { 
+            // AI came to foreground -> make refresh scan 
+            if ( !iAiModel->Connected() && !iModel->IsConnecting() )
+                {
+                LOG_WRITE( "Call Refresh scan" );
+                TRAP_IGNORE( iModel->RefreshScanL() );
+                }
+            else
+                {
+                LOG_WRITE( "Connected no need to refresh scan results" );
+                }
+            break; 
+            } 
+            
+        case EAiIdleBackground:
+            {
+            // AI went to background -> dismiss open dialogs/menus
+            TRAP_IGNORE( iController.DismissDialogsL() );
+            break;
+            }
+            
+        default: 
+            { 
+            break; 
+            } 
+        } 
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::Suspend
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::Suspend( TAiTransitionReason /*aReason*/ )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::Suspend" );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::Stop
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::Stop( TAiTransitionReason /*aReason*/ )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::Stop" );
+    TRAP_IGNORE( iController.DeInitializeL() );
+    if ( iAnimationPeriodic )
+        {
+        LOG_WRITE( "Cancel animation update" );
+        iAnimationPeriodic->Cancel();
+        delete iAnimationPeriodic;
+        iAnimationPeriodic = NULL;
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SubscribeL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::SubscribeL( MAiContentObserver& aObserver )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::Subscribe" );
+    return iObservers.AppendL( &aObserver );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::ConfigureL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::ConfigureL( RAiSettingsItemArray& /*aSettings*/ )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::ConfigureL" );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::Extension
+// --------------------------------------------------------------------------
+//
+TAny* CWsfAiPlugin::Extension( TUid aUid )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::Extension" );
+    if ( aUid == KExtensionUidProperty )
+        {
+        return static_cast<MAiPropertyExtension*>( this );
+        }
+    else if ( aUid == KExtensionUidEventHandler )
+        {
+        return static_cast<MAiEventHandlerExtension*>( this );
+        }
+
+    return NULL;
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::GetPropertyL
+// --------------------------------------------------------------------------
+//
+TAny* CWsfAiPlugin::GetPropertyL( TInt aProperty )
+    {
+    switch ( aProperty )
+        {
+        case EAiPublisherInfo:
+            {
+            return &iInfo;
+            }
+
+        case EAiPublisherContent:
+            {
+            return static_cast<MAiContentItemIterator*>( iContent );
+            }
+
+        case EAiPublisherEvents:
+            {
+            return static_cast<MAiContentItemIterator*>( iEvents );
+            }
+            
+        default:
+            {
+            User::Leave( KErrNotSupported );
+            }
+        }
+    
+    return NULL;
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SetPropertyL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::SetPropertyL( TInt aProperty, TAny* aValue )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::SetProperty" );
+    if ( aValue && ( aProperty == EAiPublisherInfo ) )
+        {
+        const TAiPublisherInfo* info =
+                            static_cast<const TAiPublisherInfo*>( aValue );
+        iInfo = *info;  
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::HandleEvent
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::HandleEvent( TInt aEvent, const TDesC& /*aParam*/ )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::HandleEvent" );
+    switch ( aEvent )
+        {
+        case EAiWizardEventLaunchApplication:
+            {
+            TRAP_IGNORE( LaunchApplicationL() );
+            break;
+            }
+            
+        case EAiWizardGainFocusInfoArea:
+            {
+            iInfoAreaFocus = ETrue;
+            TRAP_IGNORE( SetMskL() );
+            break;
+            }
+            
+        case EAiWizardLostFocusInfoArea:
+            {
+            iInfoAreaFocus = EFalse;
+            break;            
+            }
+            
+        case EAiWizardOpenMenu:
+            {
+            if ( !iRefreshing )
+                {
+                TRAP_IGNORE( iController.HandleSelectionKeyL() );
+                }
+            break;
+            }
+            
+        default:
+            {
+            }
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::ClearL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::ClearL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::ClearL" );
+    for ( TInt i = 0; i < iObservers.Count(); ++i )
+        {
+        MAiContentObserver* observer = iObservers[i];
+
+        observer->StartTransaction( reinterpret_cast<TInt32>( this ) );
+
+        observer->Clean( *this, EAiWizardContentNaviBarIcon, 
+                                EAiWizardContentNaviBarIcon );
+        observer->Clean( *this, EAiWizardContentTitleText, 
+                                EAiWizardContentTitleText );
+        observer->Clean( *this, EAiWizardContentStatusIcon, 
+                                EAiWizardContentStatusIcon );
+        observer->Clean( *this, EAiWizardContentStatusText, 
+                                EAiWizardContentStatusText );
+        observer->Clean( *this, EAiWizardContentTypeIcon,
+                                EAiWizardContentTypeIcon );
+        observer->Clean( *this, EAiWizardContentTypeText, 
+                                EAiWizardContentTypeText );
+        observer->Clean( *this, EAiWizardContentStrengthIcon, 
+                                EAiWizardContentStrengthIcon );
+        observer->Clean( *this, EAiWizardContentStrengthText, 
+                                EAiWizardContentStrengthText );
+        observer->Clean( *this, EAiWizardContentSecureIcon, 
+                                EAiWizardContentSecureIcon );
+        observer->Clean( *this, EAiWizardContentSecureText, 
+                                EAiWizardContentSecureText );
+        observer->Clean( *this, EAiWizardContentNetworkName, 
+                                EAiWizardContentNetworkName );
+        observer->Commit( reinterpret_cast<TInt32>( this ) );
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SetStrengthAndSecure
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::SetStrengthAndSecure( TDesC* aStrength, TDesC* aSecure )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::SetStrengthAndSecure" );
+    delete iCurrentSignalStrength;
+    iCurrentSignalStrength = NULL;
+    if ( aStrength && aStrength->Length() > 0)
+        {
+        iCurrentSignalStrength = aStrength->Alloc();
+        }
+
+    delete iCurrentSecureInfo;
+    iCurrentSecureInfo = NULL;
+    if ( aSecure && aSecure->Length() > 0)
+        {
+        // r_qtn_sniffer_plug_in_content_secure
+        iCurrentSecureInfo = aSecure->Alloc();
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SetScanningState
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::SetScanningState( TBool aScanState )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::SetScanningState" );
+    iScanState = aScanState;
+    TRAP_IGNORE( SetMskL() );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SetRefreshingL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::SetRefreshingL( TBool aRefreshing )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::SetRefreshingL" );
+    if( iRefreshing != aRefreshing )
+        {
+        LOG_WRITEF( "iRefreshing = %d and aRefreshing = %d ", 
+                     iRefreshing, aRefreshing );
+        if( aRefreshing )
+            {
+            if ( iAnimationPeriodic )
+                {
+                iAnimationPeriodic->Cancel();
+                delete iAnimationPeriodic;
+                iAnimationPeriodic = NULL;
+                }
+            iAiModel->InitializeRefreshAnimation();
+            iAnimationPeriodic = CPeriodic::NewL(
+                    CActive::EPriorityStandard );
+                        
+            iAnimationPeriodic->Start(
+                    TTimeIntervalMicroSeconds32( KRefreshStepTime ),
+                    TTimeIntervalMicroSeconds32( KRefreshStepTime ),
+                    TCallBack( 
+                            CWsfAiPlugin::DoRefreshingStepL,
+                            this
+                            ) );
+            }
+        else
+            {
+            iAnimationPeriodic->Cancel();
+            delete iAnimationPeriodic;
+            iAnimationPeriodic = NULL;
+            }
+        }
+    iRefreshing = aRefreshing;
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SetRefreshingL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::StartConnectingL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::StartConnectingL" );
+    
+    if ( iAnimationPeriodic )
+        {
+        iAnimationPeriodic->Cancel();
+        delete iAnimationPeriodic;
+        iAnimationPeriodic = NULL;
+        }
+
+    iAiModel->InitializeConnectingAnimation();
+    iAnimationPeriodic = CPeriodic::NewL(
+                                    CActive::EPriorityStandard );
+                
+    iAnimationPeriodic->Start(
+            TTimeIntervalMicroSeconds32( KConnectingStepTime ),
+            TTimeIntervalMicroSeconds32( KConnectingStepTime ),
+            TCallBack( 
+                    CWsfAiPlugin::DoConnectingStepL,
+                    this
+                    ) );
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::NewL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::LaunchApplicationL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::LaunchApplication" );
+    RApaLsSession appArcSession;
+
+    // connect to AppArc server
+    User::LeaveIfError( appArcSession.Connect() );
+    CleanupClosePushL( appArcSession );
+
+
+    // check if the app is already running ... and brings it to foreground.
+    TUid id( TUid::Uid( KUidSnifferApp.iUid ) );
+    TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
+    TApaTask task = taskList.FindApp( id );
+
+    if ( task.Exists() )
+        {
+        task.BringToForeground();
+           }
+    else
+        {
+        TThreadId threadId;
+        User::LeaveIfError( appArcSession.StartDocument( 
+                                        KNullDesC, 
+                                        TUid::Uid( KUidSnifferApp.iUid ),
+                                        threadId ) );
+        }
+        
+    CleanupStack::PopAndDestroy( &appArcSession ); //appArcSession
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::SetMskL
+// --------------------------------------------------------------------------
+//
+void CWsfAiPlugin::SetMskL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::SetMsk" );
+    
+    if ( AknLayoutUtils::PenEnabled() )
+        {
+        // MSK not updated in touch products
+        return;
+        }
+    
+    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+    
+    if( cba )
+        {
+        if ( iAiModel->ScanningOn() || iAiModel->Connected() )
+            {
+            // Show context menu icon
+            cba->SetCommandL( CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
+                          EAknSoftkeyContextOptions, 
+                          KNullDesC );
+            }
+        else
+            {
+            if ( !iMskActivate )
+                {
+                iMskActivate = StringLoader::LoadL( R_QTN_MSK_SNIFFER_ACTIVATE );
+                }
+            // Show 'Activate'
+            cba->SetCommandL( CEikButtonGroupContainer::EMiddleSoftkeyPosition, 
+                          EAknSoftkeyOk, 
+                          *iMskActivate );
+            }
+        cba->DrawDeferred();
+    	}
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::PublishText
+// --------------------------------------------------------------------------
+//
+TBool CWsfAiPlugin::PublishText( MAiContentObserver* aObserver,
+                                 TWsfAiWizardContentIds aContentId,
+                                 const TDesC16& aText )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::PublishText" );
+    TBool published( EFalse );
+    TInt error( 0 );
+    if ( aObserver->CanPublish( *this, aContentId, aContentId ) )
+        {
+        error = aObserver->Publish( *this,
+                                    aContentId,
+                                    aText,
+                                    aContentId );
+
+        if ( error == KErrNone )
+            {
+            published = ETrue;
+            }
+        }
+    return published;
+    }
+
+
+// --------------------------------------------------------------------------
+// CWsfAiPlugin::PublishIconL
+// --------------------------------------------------------------------------
+//
+TBool CWsfAiPlugin::PublishIconL( MAiContentObserver* aObserver,
+                                  TWsfAiWizardContentIds aContentId,
+                                  TInt aIconId )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::PublishIcon" );
+    TBool published( EFalse );
+    TInt error( 0 );
+    if ( aObserver->CanPublish( *this, aContentId, aContentId ) )
+        {
+        error = aObserver->PublishPtr( 
+                              *this,
+                              aContentId,
+                              CWsfIconArrayCreator::GetIconLC( aIconId ),
+                              aContentId );
+
+        CleanupStack::Pop(); // pop the icon
+
+        if ( error == KErrNone )
+            {
+            published = ETrue;
+            }
+        }
+    return published;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::PublishCleanup
+// ---------------------------------------------------------------------------
+//
+void CWsfAiPlugin::PublishCleanup( TAny* aPtr )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::PublishClearup" );
+    CWsfAiPlugin* self = static_cast<CWsfAiPlugin*>( aPtr );
+    self->iObservers[self->iCurrentObserverIndex]
+                     ->CancelTransaction( reinterpret_cast<TInt32>( self ) );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::StartupRefresh
+// ---------------------------------------------------------------------------
+//
+TInt CWsfAiPlugin::StartupRefresh( TAny* aPtr )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::StartupRefresh" );
+    CWsfAiPlugin* self = static_cast<CWsfAiPlugin*>( aPtr );
+    TRAP_IGNORE( self->StartupRefreshL(); );
+    
+    return 0;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::StartupRefreshL
+// ---------------------------------------------------------------------------
+//
+TInt CWsfAiPlugin::StartupRefreshL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::StartupRefresh" );
+    iController.StartupRefreshL();
+    
+    return 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::DoRefreshingStepL
+// ---------------------------------------------------------------------------
+//
+TInt CWsfAiPlugin::DoRefreshingStepL( TAny* ptr )
+	{
+	LOG_ENTERFN( "CWsfAiPlugin::DoRefreshingStepL( ptr )" );
+	static_cast<CWsfAiPlugin*>( ptr )->DoRefreshingStepL();
+	return ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::DoRefreshingStepL
+// ---------------------------------------------------------------------------
+//
+void CWsfAiPlugin::DoRefreshingStepL()
+	{
+	LOG_ENTERFN( "CWsfAiPlugin::DoRefreshingStepL" );
+	
+	if ( !iAiModel->ScanningOn() )
+	    {
+	    LOG_WRITE( "Disable refreshing" );
+	    if ( iAnimationPeriodic )
+	        {
+	        LOG_WRITE( "Cancel animation update" );
+	        iAnimationPeriodic->Cancel();
+	        delete iAnimationPeriodic;
+	        iAnimationPeriodic = NULL;
+	        }
+	    iRefreshing = EFalse;
+	    }
+	else
+	    {
+	    iAiModel->AnimateRefresh();
+	    iController.RefreshRefreshingL();
+	    }	
+	}
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::DoConnectingStepL
+// ---------------------------------------------------------------------------
+//
+TInt CWsfAiPlugin::DoConnectingStepL( TAny* ptr )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::DoConnectingStepL( ptr )" );
+    static_cast<CWsfAiPlugin*>( ptr )->DoConnectingStepL();
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::DoConnectingStepL
+// ---------------------------------------------------------------------------
+//
+void CWsfAiPlugin::DoConnectingStepL()
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::DoConnectingStepL" );
+    
+    if ( !iModel->IsConnecting() )
+        {
+        LOG_WRITE( "Disable refreshing" );
+        if ( iAnimationPeriodic )
+            {
+            LOG_WRITE( "Cancel animation update" );
+            iAnimationPeriodic->Cancel();
+            delete iAnimationPeriodic;
+            iAnimationPeriodic = NULL;
+            }
+        }
+    else
+        {
+        iAiModel->AnimateConnecting();
+        iController.RefreshConnectingL();
+        }   
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfAiPlugin::PublishStatusIconL
+// ---------------------------------------------------------------------------
+//
+void CWsfAiPlugin::PublishStatusIconL( CArrayFix<TInt>* aPublishIconArray, 
+                                    CEikLabel* /*aText1*/ )
+    {
+    LOG_ENTERFN( "CWsfAiPlugin::PublishStatusIconL" );
+    TBool published( EFalse );
+    TInt iconId( 0 );
+
+    ClearL();   // Clear all WLAN Wizard content from the AI2
+
+    for ( iCurrentObserverIndex = 0; 
+          iCurrentObserverIndex < iObservers.Count(); 
+          ++iCurrentObserverIndex )
+        {
+        MAiContentObserver* observer = iObservers[iCurrentObserverIndex];
+        
+        // Publish Status icon: EAiWizardContentStatusIcon
+        iconId = aPublishIconArray->At( 0 );
+        published = PublishIconL( observer, 
+                                  EAiWizardContentStatusIcon,
+                                  iconId ) || published;
+        // If we published something then commit, 
+        // otherwise cancel transaction
+        if ( published )
+            {
+            published = EFalse;
+            }
+        }
+    }
+
+
+// End of File.