connectionutilities/ConnectionDialogs/ConnectionUiUtilities/NotifSrc/ActiveConnectViaNote.cpp
author Simon Howkins <simonh@symbian.org>
Thu, 18 Nov 2010 15:05:52 +0000
branchRCL_3
changeset 76 40780c2f3a6b
parent 0 5a93021fdf25
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* 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:  Implementation of CActiveConnectViaNote.
*
*/


// INCLUDE FILES
#include "ActiveConnectViaNote.h"
#include "ConnectViaNoteNotif.h"
#include "NoteDlgSuppressingSwitch.h"
#include "ConnectionDialogsLogger.h"

#include <ConnUiUtilsNotif.rsg>
#include <StringLoader.h>

#include <eikimage.h>
#include <gulicon.h>

#include <cmconnectionmethod.h>
#include <cmdestination.h>

#ifndef __WINS__
#include <featmgr.h>
#include <wlanmgmtclient.h>
#include <cmmanagerext.h>
#endif  // !__WINS__

// CONSTANTS

LOCAL_D const TInt KStringsGranularity = 2;


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

// ---------------------------------------------------------
// CActiveConnectViaNote::CActiveConnectViaNote()
// ---------------------------------------------------------
//
CActiveConnectViaNote::CActiveConnectViaNote( 
                           CConnectViaNoteNotif* aNotif, 
                           const TConnUiUiDestConnMethodNoteId aData ) 
: CActive( KErrNone ), 
  iNotif( aNotif ), 
  iIcon( NULL ), 
  iData( aData )
    {
    CActiveScheduler::Add( this );            
    }
    
// ---------------------------------------------------------
// CActiveConnectViaNote::DoCancel()
// ---------------------------------------------------------
// 
void CActiveConnectViaNote::DoCancel()
    {
    }
 
// ---------------------------------------------------------
// CActiveConnectViaNote::RunL()
// ---------------------------------------------------------
//     
void CActiveConnectViaNote::RunL()
    {
    CLOG_ENTERFN( "CActiveConnectViaNote::RunL" );  
    
    if( iStatus == KErrNone )
        {
        iCmManager.OpenL();
        
        HBufC* noteText = GetDialogTextL();
        CleanupStack::PushL( noteText );
                
        CNoteDlgSuppressingSwitch* dialog = new (ELeave) 
                            CNoteDlgSuppressingSwitch( 
                            REINTERPRET_CAST( CEikDialog**, &dialog ) );
        CleanupStack::PushL( dialog );
        
        CEikImage* image = CreateEikImageFromCGulIconLC();
        dialog->SetIconL( image ); //The dialog takes ownership of the pointer
        CleanupStack::Pop( image );
        
        CleanupStack::Pop( dialog );

        TInt resId = R_CONNECTING_VIA_INFO_NOTE;    
        switch( iData.iNoteId )
            {
            case EConnectedViaDestConnMethodConfirmationNote:
            case EConnectedViaConnMethodConfirmationNote:
                {
                resId = R_CONNECTED_VIA_CONFIRM_NOTE;
                break;
                }
            case EConnectingToConnMethodInfoNote:
            default :
                {                
                break;
                }
            }
            
        dialog->PrepareLC( resId );
        dialog->ActivateL();
        dialog->SetCurrentLabelL( EGeneralNote, noteText->Des() );
        
        dialog->RunDlgLD( CAknNoteDialog::ELongTimeout, 
                          CAknNoteDialog::ENoTone );
                                         
        CleanupStack::PopAndDestroy( noteText );
        
        CLOG_WRITE( "CActiveConnectViaNote::RunL: Completing with KErrNone" );

        iNotif->CompleteL( KErrNone );                     
        }     
    
    CLOG_LEAVEFN( "CActiveConnectViaNote::RunL" );  
    }
    
// ---------------------------------------------------------
// CActiveConnectViaNote::LaunchActiveConnectViaNote()
// ---------------------------------------------------------
//    
void CActiveConnectViaNote::LaunchActiveConnectViaNote()
    {
    CLOG_ENTERFN( "CActiveConnectViaNote::LaunchActiveConnectViaNote" );  
    
    SetActive();    
    iClientStatus = &iStatus;
    User::RequestComplete( iClientStatus, KErrNone );    
    }
    
    
// ---------------------------------------------------------
// CActiveConnectViaNote::~CActiveConnectViaNote()
// ---------------------------------------------------------
//    
CActiveConnectViaNote::~CActiveConnectViaNote()
    {
    Cancel();  
    iCmManager.Close();  
       
    delete iIcon;
    iIcon = NULL;      
    }
    
// ---------------------------------------------------------
// CActiveConnectViaNote::GetDialogTextL()
// ---------------------------------------------------------
//    
HBufC* CActiveConnectViaNote::GetDialogTextL()
    {
    HBufC* tempText = NULL;
    switch( iData.iNoteId )
        {
        case EConnectedViaDestConnMethodConfirmationNote:
            {
            HBufC* destName = GetDestinationNameLC( iData.iDestination );
            HBufC* cmName = GetConnectionMethodNameLC( 
                                                    iData.iConnectionMethod );
            CDesCArrayFlat* strings = new( ELeave ) CDesCArrayFlat( 
                                                        KStringsGranularity );
            CleanupStack::PushL( strings );
            
            strings->AppendL( *destName );   
            strings->AppendL( *cmName );
            tempText = StringLoader::LoadL( 
                                        R_QTN_NETW_CONSET_CONF_CONNECTED_TO,
                                        *strings );

            CleanupStack::PopAndDestroy( strings );  
            CleanupStack::PopAndDestroy( cmName );
            CleanupStack::PopAndDestroy( destName );
            break;
            }

        case EConnectedViaConnMethodConfirmationNote:
        case EConnectingToConnMethodInfoNote:
        default:
            {
            HBufC* cmNname = GetConnectionMethodNameLC( 
                                                    iData.iConnectionMethod );
            tempText = StringLoader::LoadL( 
                ( iData.iNoteId == EConnectedViaConnMethodConfirmationNote ) ?
                R_QTN_NETW_CONSET_CONF_CONNECTED_VIA_METHOD : 
                R_QTN_NETW_CONSET_INFO_ROAMING_TO,
                *cmNname );
            CleanupStack::PopAndDestroy( cmNname ); 
            break;
            }
        }

    return tempText;
    }

// ---------------------------------------------------------
// CActiveConnectViaNote::GetDestinationNameLC()
// ---------------------------------------------------------
//    
HBufC* CActiveConnectViaNote::GetDestinationNameLC( const TUint32 aDestId )
    {
    HBufC* tempDestName( NULL );
        
    RCmDestination destination = iCmManager.DestinationL( aDestId );    
    CleanupClosePushL( destination );

    tempDestName = destination.NameLC();
    CleanupStack::Pop( tempDestName );  // tempDestName

    CleanupStack::PopAndDestroy();  // destination
    CleanupStack::PushL( tempDestName );
            
    return tempDestName;
    }
    
// ---------------------------------------------------------
// CActiveConnectViaNote::GetConnectionMethodNameLC()
// ---------------------------------------------------------
//    
HBufC* CActiveConnectViaNote::GetConnectionMethodNameLC( 
                                                    const TUint32 aConnMId )
    {
    HBufC* tempCMName( NULL );
    TBool isEasyWlan = EFalse;

#ifndef __WINS__
    
    FeatureManager::InitializeLibL();
    TBool isWlanSupported = 
                    FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
    FeatureManager::UnInitializeLib();

    if ( isWlanSupported )
        {
        if ( iCmManager.EasyWlanIdL() == iData.iConnectionMethod )
            {
            TWlanSsid ssidConn;
            CWlanMgmtClient *wlanMgmtClient = CWlanMgmtClient::NewL();
            CleanupStack::PushL( wlanMgmtClient );

            if ( !wlanMgmtClient->GetConnectionSsid( ssidConn ) )
                {
                tempCMName = HBufC::NewL( ssidConn.Length() );
                tempCMName->Des().Copy( ssidConn ); 
                isEasyWlan = ETrue;
                }

            wlanMgmtClient->CancelNotifications();
            CleanupStack::PopAndDestroy( wlanMgmtClient );
            }
        }
#endif  // !__WINS__
    
    CLOG_WRITEF( _L( "Connection Method id in CActiveConnectViaNote: %d" ), aConnMId );

    RCmConnectionMethod connMethod = iCmManager.ConnectionMethodL( aConnMId );
    CleanupClosePushL( connMethod );

    TInt tempIcon = connMethod.GetIntAttributeL( CMManager::ECmBearerIcon );
    CLOG_WRITEF( _L( "tempIcon in CActiveConnectViaNote: %d" ), tempIcon );
    iIcon = REINTERPRET_CAST( CGulIcon*, tempIcon );
    
    if ( !isEasyWlan )
        {
        tempCMName = connMethod.GetStringAttributeL( CMManager::ECmName );
        }
    
    CleanupStack::PopAndDestroy();  // connMethod
    CleanupStack::PushL( tempCMName );
    
    return tempCMName;
    }
    
// ---------------------------------------------------------
// CActiveConnectViaNote::CreateEikImageFromCGulIconLC()
// ---------------------------------------------------------
//   
CEikImage* CActiveConnectViaNote::CreateEikImageFromCGulIconLC()
    {
    CEikImage* tempImage = new ( ELeave ) CEikImage();
    
    if( iIcon )
        {                
        CFbsBitmap* bm = iIcon->Bitmap();
        CFbsBitmap* m = iIcon->Mask();
        tempImage->SetPicture( bm, m );
        iIcon->SetBitmapsOwnedExternally( ETrue );                
        }
    
    CleanupStack::PushL( tempImage );
    return tempImage;    
    }



// End of File