wlanutilities/wlanplugin/src/wlanplugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 12 Mar 2010 15:48:54 +0200
branchRCL_3
changeset 10 dff6ebfd236f
parent 0 56b72877c1cb
permissions -rw-r--r--
Revision: 201007 Kit: 201008

/*
* Copyright (c) 2007 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:  WlanPlugin class.
*
*/


// INCLUDE FILES

// User includes
#include "wlanplugin.h"
#include "wlanpluginwlanstate.h"
#include "wlanpluginlogger.h"

// System includes
#include <wlanpluginrsc.rsg>
#include <gsparentplugin.h>
#include <gsfwviewuids.h>
#include <AknNullService.h>
#include <bautils.h>
#include <StringLoader.h>
#include <featmgr.h>
#include <AknGlobalNote.h>
#include <ErrorUI.h>


// Resource file location
_LIT( KWlanPluginResourceFileName, "z:wlanpluginrsc.rsc" );

// ROM folder
_LIT( KDriveZ, "z:" );

// Name of the MBM file containing icons
_LIT( KFileIcons, "wlanplugin.mif");

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CWlanPlugin::NewL
// First phase constructor
// ---------------------------------------------------------
CWlanPlugin* CWlanPlugin::NewL( TAny* /*aInitParams*/ )
    {
    CWlanPlugin* self = new ( ELeave ) CWlanPlugin();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;     
    }

// ---------------------------------------------------------
// Destructor
// ---------------------------------------------------------
CWlanPlugin::~CWlanPlugin()
    {
    CLOG_ENTERFN( "CWlanPlugin::~CWlanPlugin()" );  
            
    iResources.Close();
    
    if( iNullService )
        {
        delete iNullService;
        }
    if ( iWlanState )
        {
        delete iWlanState;
        }
        
    CLOG_ENTERFN( "CWlanPlugin::~CWlanPlugin()" );    
    }

// ---------------------------------------------------------
// CWlanPlugin::ConstructL
// ---------------------------------------------------------
TAny CWlanPlugin::ConstructL()
    {
    CLOG_CREATE;
    
    CLOG_ENTERFN( "CWlanPlugin::ConstructL()" );
    
    BaseConstructL(); 
    
    OpenLocalizedResourceFileL();    
                                
    // Check Wlan support in construction phase to
    // avoid creating of plugin when it is not necessary. 
    if( GetWlanSupported() ) 
        {
        // This is the parent plugin
        CGSParentPlugin* parent = static_cast<CGSParentPlugin*>(
                 AppUi()->View( KGSConPluginUid ) );
            
        iWlanState = CWlanPluginWlanState::NewL( parent );
        }
    else 
        {
        User::Leave( KErrNotSupported );
        }
    
    CLOG_LEAVEFN( "CWlanPlugin::ConstructL()" );
    }
    
// ---------------------------------------------------------
// CWlanPlugin::Id
// ---------------------------------------------------------
TUid CWlanPlugin::Id() const
    {
    CLOG_ENTERFN( "CWlanPlugin::Id()" );
    
    CLOG_LEAVEFN( "CWlanPlugin::Id()" );
    
    return KWlanPluginUid;
    
    }
        
// ---------------------------------------------------------
// CWlanPlugin::DoActivateL
// ---------------------------------------------------------
void CWlanPlugin::DoActivateL( const TVwsViewId& /*aPrevViewId*/, 
                                       TUid /*aCustomMessageId*/, 
                                       const TDesC8& /*aCustomMessage*/ )
    {
    CLOG_ENTERFN( "CWlanPlugin::DoActivateL()" );
    //no implementation required
    CLOG_LEAVEFN( "CWlanPlugin::DoActivateL()" );
    }

// ---------------------------------------------------------
// CWlanPlugin::DoDeactivate
// ---------------------------------------------------------
void CWlanPlugin::DoDeactivate()
    {
    CLOG_ENTERFN( "CWlanPlugin::DoDeactivate()" );
    //no implementation required
    CLOG_LEAVEFN( "CWlanPlugin::DoDeactivate()" );
    }

// ---------------------------------------------------------
// CWlanPlugin::GetCaptionL
// ---------------------------------------------------------
void CWlanPlugin::GetCaptionL( TDes& aCaption ) const
    {
    CLOG_ENTERFN( "CWlanPlugin::GetCaptionL()" );
    
    StringLoader::Load( aCaption, R_QTN_SET_FOLDER_CONN_WLAN );
    
    CLOG_LEAVEFN( "CWlanPlugin::GetCaptionL()" );    
    }

// ---------------------------------------------------------
// CWlanPlugin::HasBitmap
// ---------------------------------------------------------
TBool CWlanPlugin::HasBitmap() const
    {
    CLOG_ENTERFN( "CWlanPlugin::HasBitmap()" );
    
    CLOG_LEAVEFN( "CWlanPlugin::HasBitmap()" ); 
    
    return EFalse;
    }

// ---------------------------------------------------------
// CWlanPlugin::GetBitmapL
// ---------------------------------------------------------
void CWlanPlugin::GetBitmapL( CFbsBitmap* /*aBitmap*/, 
                                      CFbsBitmap* /*aMask*/ ) const
    {
    
    CLOG_ENTERFN( "CWlanPlugin::GetBitmapL()" );
    CLOG_LEAVEFN( "CWlanPlugin::GetBitmapL()" );    
    //no bitmap
    User::Leave( KErrNotFound );
    }
    
// ---------------------------------------------------------
// CWlanPlugin::PluginProviderCategory
// ---------------------------------------------------------
TInt CWlanPlugin::PluginProviderCategory() const
    {
    
    CLOG_ENTERFN( "CWlanPlugin::PluginProviderCategory()" );
    CLOG_LEAVEFN( "CWlanPlugin::PluginProviderCategory()" ); 
       
    return EGSPluginProviderOEM;
    }
    
// ---------------------------------------------------------
// CWlanPlugin::HandleSelection
// ---------------------------------------------------------   
void CWlanPlugin::HandleSelection(
            const TGSSelectionTypes /*aSelectionType*/ )
    {   
    CLOG_ENTERFN( "CWlanPlugin::HandleSelection()" );    
    
    TRAPD( error, LaunchSnifferAppL() );
    if( error != KErrNone && 
    	error != KErrNotFound &&
    	error != KErrServerTerminated )
        {
        ShowErrorNote( error );
        }
    
    CLOG_LEAVEFN( "CWlanPlugin::HandleSelection()" );     
    }

// ---------------------------------------------------------
// CWlanPlugin::ItemType
// ---------------------------------------------------------
TGSListboxItemTypes CWlanPlugin::ItemType()
    {
    
    CLOG_ENTERFN( "CWlanPlugin::ItemType()" );    
    CLOG_LEAVEFN( "CWlanPlugin::ItemType()" );     
    
    return EGSItemTypeSettingDialog;
    }
    
// ---------------------------------------------------------
// CWlanPlugin::CreateIconL
// ---------------------------------------------------------    
CGulIcon* CWlanPlugin::CreateIconL( const TUid aIconType )
    {

    CLOG_ENTERFN( "CWlanPlugin::CreateIconL()" );  

    TFileName iconsFileName;

    iconsFileName.Append( KDriveZ );
    iconsFileName.Append( KDC_APP_BITMAP_DIR );
    iconsFileName.Append( KFileIcons );
    
    CGulIcon* icon;
       
    TInt pic, picmask;
    TAknsItemID itemid;
    //if the main icon is asked   
    if ( aIconType == KGSIconTypeLbxItem )
        {
        if ( iWlanState->GetMainIconL( pic, picmask, itemid ) )
            {
            icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
                                              itemid, 
                                              iconsFileName, 
                                              pic, 
                                              picmask );
            }
        else
            {
            icon = CGSPluginInterface::CreateIconL( aIconType );
            }
        }
    //if the secondary icon is asked   
    else if ( aIconType == KGSIconTypeDColumn )
        {
        //if there should be icon
        if ( iWlanState->GetStrengthIconL( pic, picmask, itemid ) )
            {
            icon = CGulIcon::NewLC();
            CFbsBitmap* bitmap;
            CFbsBitmap* mask;

            // Creates bitmap an icon. 
            AknsUtils::CreateColorIconL( AknsUtils::SkinInstance(), 
                                         itemid,
                                         KAknsIIDQsnIconColors, 
                                         EAknsCIQsnIconColorsCG13, 
                                         bitmap,
                                         mask, 
                                         iconsFileName, 
                                         pic, 
                                         picmask, 
                                         KRgbBlack );

            icon->SetBitmap( bitmap );
            icon->SetMask( mask );
            CleanupStack::Pop( icon );
            }
        //if there should be no icons
        else
            {
            icon = CGSPluginInterface::CreateIconL( aIconType );
            }
        }
     //in other case of icons
     else
        {
        icon = CGSPluginInterface::CreateIconL( aIconType );
        }

    CLOG_LEAVEFN( "CWlanPlugin::CreateIconL()" );     

    return icon;
    }

// ---------------------------------------------------------
// CVWlanPlugin::Visible
// ---------------------------------------------------------
TBool CWlanPlugin::Visible() const
    {
    
    CLOG_ENTERFN( "CWlanPlugin::Visible()" );    
    CLOG_LEAVEFN( "CWlanPlugin::Visible()" );     
    
    return GetWlanSupported();
    }
    
// ---------------------------------------------------------
// CWlanPlugin::CWlanPlugin
// ---------------------------------------------------------
CWlanPlugin::CWlanPlugin():
    iResources( *CCoeEnv::Static() ),
    iNullService( NULL )
    {
    // no implementation required
    }
    
// ---------------------------------------------------------
// CWlanPlugin::GetValue
// ---------------------------------------------------------
void CWlanPlugin::GetValue( const TGSPluginValueKeys aKey,
                       TDes& aValue )
    {    
    CLOG_ENTERFN( "CWlanPlugin::GetValue()" );    
    
    //if the second line of the listbox is asked
    if( aKey == EGSPluginKeySettingsItemValueString )
        {     
        TRAP_IGNORE( iWlanState->GetStateStringL( aValue ) );
        }
        
    CLOG_LEAVEFN( "CWlanPlugin::GetValue()" );     
    }

// ---------------------------------------------------------
// CWlanPlugin::OpenLocalizedResourceFileL
// ---------------------------------------------------------
void CWlanPlugin::OpenLocalizedResourceFileL()
    {
    CLOG_ENTERFN( "CWlanPlugin::OpenLocalizedResourceFileL()" );    
    
    
    RFs fsSession;
    User::LeaveIfError( fsSession.Connect() );

    // Find the resource file:
    TParse parse;
    parse.Set( KWlanPluginResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL );
    TFileName fileName( parse.FullName() );

    // Get language of resource file:
    BaflUtils::NearestLanguageFile( fsSession, fileName );

    // Open resource file:
    iResources.OpenL( fileName );

    // If leave occurs before this, close is called automatically when the
    // thread exits.
    fsSession.Close();
    
    CLOG_LEAVEFN( "CWlanPlugin::OpenLocalizedResourceFileL()" );     
    }
    
// ---------------------------------------------------------
// CWlanPlugin::LaunchSnifferAppL
// ---------------------------------------------------------    
void CWlanPlugin::LaunchSnifferAppL()
    {
    CLOG_ENTERFN( "CWlanPlugin::LaunchSnifferAppL()" );    
    
    // Launch app
    if ( iNullService )
        {
        delete iNullService;
        iNullService = NULL;
        }         
    iNullService = CAknNullService::NewL( KSnifferAppUid, this );
       
    CLOG_LEAVEFN( "CWlanPlugin::LaunchSnifferAppL()" );         
    }

// ---------------------------------------------------------
// CWlanPlugin::GetWlanSupported
// ---------------------------------------------------------
TBool CWlanPlugin::GetWlanSupported() const
    {
    CLOG_ENTERFN( "CWlanPlugin::GetWlanSupported()" );    
     
    TBool isWlanSupported = EFalse;
    
    TRAPD( error, FeatureManager::InitializeLibL() );
    
    if( !error )
        {
        isWlanSupported = 
            FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
        
        FeatureManager::UnInitializeLib();
        }
    
    CLOG_LEAVEFN( "CWlanPlugin::GetWlanSupported()" );         
    
    return isWlanSupported;
    }

// ---------------------------------------------------------
// CWlanPlugin::ShowErrorNote
// ---------------------------------------------------------
//
void CWlanPlugin::ShowErrorNote(TInt aErrorCode)
    {
    CLOG_ENTERFN( "CWlanPlugin::ShowErrorNote()" );    

    
    TBool errorNoteShowed = EFalse;
        
    TRAPD(error, errorNoteShowed = ShowErrorNoteL(aErrorCode));
            
    if(error || !errorNoteShowed) 
        {
        TRAP_IGNORE( ShowGeneralErrorNoteL() );
        } 
        
    CLOG_LEAVEFN( "CWlanPlugin::ShowErrorNote()" );           
    }

// ---------------------------------------------------------
// CWlanPlugin::ShowErrorNoteL
// ---------------------------------------------------------
//
TBool CWlanPlugin::ShowErrorNoteL(TInt aErrorCode)
    {
    CLOG_ENTERFN( "CWlanPlugin::ShowErrorNoteL()" );    
    
    CErrorUI* errorUi = CErrorUI::NewLC();
    
    TBool errorNoteShowed = errorUi->ShowGlobalErrorNoteL( aErrorCode );
    
    CleanupStack::PopAndDestroy( errorUi );
    
    CLOG_LEAVEFN( "CWlanPlugin::ShowErrorNoteL()" );           
        
    return errorNoteShowed;
    }    

// ---------------------------------------------------------
// CWlanPlugin::ShowGeneralErrorNoteL
// ---------------------------------------------------------
//
void CWlanPlugin::ShowGeneralErrorNoteL()
    {
    CLOG_ENTERFN( "CWlanPlugin::ShowGeneralErrorNoteL()" );    
    
    HBufC *msg = StringLoader::LoadLC( R_QTN_ERR_OS_GENERAL );
    
    CAknGlobalNote *note = CAknGlobalNote::NewLC(); 
    
    note->ShowNoteL( EAknGlobalErrorNote, *msg );

    CleanupStack::PopAndDestroy( note );
    CleanupStack::PopAndDestroy( msg );
    
    CLOG_LEAVEFN( "CWlanPlugin::ShowGeneralErrorNoteL()" );           
    }

// ---------------------------------------------------------
// CWlanPlugin::HandleServerAppExit
// ---------------------------------------------------------
//
void CWlanPlugin::HandleServerAppExit(TInt aReason)
	{
	CLOG_ENTERFN( "CWlanPlugin::HandleServerAppExit()" );  
	//MAknServerAppExitObserver::HandleServerAppExit( aReason );
	if( aReason == EAknCmdExit )
		{
		iAvkonViewAppUi->Exit();
		}
		
	CLOG_LEAVEFN( "CWlanPlugin::HandleServerAppExit()" ); 
	}

    
//End of file