connectionmonitoring/connectionmonitorui/src/GprsConnectionInfo.cpp
author Simon Howkins <simonh@symbian.org>
Thu, 18 Nov 2010 15:05:52 +0000
branchRCL_3
changeset 76 40780c2f3a6b
parent 69 cf1b3ddbe9a1
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* Copyright (c) 2004 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:  Represents a GPRS connection
*     
*
*/


// INCLUDE FILES
//#include <nifvar.h>
#include <StringLoader.h>
#include <ConnectionMonitorUi.rsg>
#include <ConnectionMonitorUi.mbg>
//#include <Avkon.rsg>

#include "ConnectionMonitorUiLogger.h"
#include "GprsConnectionInfo.h"
#include "ActiveWrapper.h"

// CONSTANTS
LOCAL_D const TUint KDetailsArrayGranularityInternal = 11;
LOCAL_D const TUint KDetailsArrayGranularityExternal = 10;


// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CGprsConnectionInfo::NewL
// ---------------------------------------------------------
//
CGprsConnectionInfo* CGprsConnectionInfo::NewL( TInt aConnectionId, 
                              RConnectionMonitor* const aConnectionMonitor,
                              TConnMonBearerType aConnectionBearerType,
                              CActiveWrapper* aActiveWrapper )
    {
    CGprsConnectionInfo* self = new ( ELeave ) CGprsConnectionInfo( 
                                                    aConnectionId, 
                                                    aConnectionMonitor, 
                                                    aConnectionBearerType,
                                                    aActiveWrapper );
    CleanupStack::PushL( self );
    self->ConstructL(); // Have to call this ConstructL at first,
    CleanupStack::Pop( self );
    CMUILOGGER_WRITE( "NewL, CGprsConnectionInfo" );
    return self;
    }


// ---------------------------------------------------------
// CGprsConnectionInfo::~CGprsConnectionInfo
// ---------------------------------------------------------
//
CGprsConnectionInfo::~CGprsConnectionInfo()
    {
    }


// ---------------------------------------------------------
// CGprsConnectionInfo::CGprsConnectionInfo
// ---------------------------------------------------------
//
CGprsConnectionInfo::CGprsConnectionInfo(  TInt aConnectionId, 
                             RConnectionMonitor* const aConnectionMonitor,
                             TConnMonBearerType aConnectionBearerType,
                             CActiveWrapper* aActiveWrapper ) :
    CConnectionInfoBase( aConnectionId, 
                         aConnectionMonitor, 
                         aConnectionBearerType,
                         aActiveWrapper )
        {
        CMUILOGGER_WRITE( "CGprsConnectionInfo constuctor" );
        }


// ---------------------------------------------------------
// CGprsConnectionInfo::ConstructL
// ---------------------------------------------------------
//
void CGprsConnectionInfo::ConstructL()
    {
    CMUILOGGER_ENTERFN( "CGprsConnectionInfo::ConstructL() start" );
    
    iActiveWrapper->StartGetStringAttribute( iConnectionId,
                                             iConnectionMonitor,
                                             KAccessPointName,
                                             iApName );
#ifdef  __WINS__
    iApName = _L( "LAN" );
#else
    TInt err( iActiveWrapper->iStatus.Int() );
    CMUILOGGER_WRITE_F( "CGprsConnectionInfo::ConstructL status: %d", err );
    if ( err != KErrNone )
        {
        User::Leave( err );
        }
#endif
    CMUILOGGER_WRITE_F( "iApName Connection name: %S", &iApName );
    
    CConnectionInfoBase::ConstructL(); // and base class ConstructL next.
    CMUILOGGER_WRITE( "CGprsConnectionInfo::ConstructL() end" );
    }
    
// ---------------------------------------------------------
// CGprsConnectionInfo::DeepCopyL
// ---------------------------------------------------------
//        
CConnectionInfoBase* CGprsConnectionInfo::DeepCopyL()
	{
	CGprsConnectionInfo* temp = new ( ELeave ) CGprsConnectionInfo(
                                                    iConnectionId,
                                                    iConnectionMonitor,
                                                    iConnectionBearerType,
                                                    iActiveWrapper );
                              							
	temp->iConnectionName = iConnectionName;
	temp->iConnectionStatus = iConnectionStatus;
	temp->iUploaded = iUploaded;
	temp->iDownloaded = iDownloaded;
	temp->iStartTime = iStartTime;
	temp->iDuration = iDuration;
	temp->iLastSpeedUpdate = iLastSpeedUpdate;
	temp->iUpSpeed = iUpSpeed;
	temp->iDownSpeed = iDownSpeed;
	temp->iListBoxItemText = iListBoxItemText;
	
	temp->iApName = iApName;
	
	if ( iDetailsArray )
		{
		CleanupStack::PushL( temp );		
		temp->ToArrayDetailsL();
		CleanupStack::Pop( temp );			
		}

	return temp;	
	}
    

// ---------------------------------------------------------
// CGprsConnectionInfo::GetIconId
// ---------------------------------------------------------
//
TUint CGprsConnectionInfo::GetIconId() const
    {
    TUint iconId = EGprs;
    if ( iConnectionStatus == EConnectionSuspended )
	    {
	    iconId = ESuspended;
	    }
    return iconId;
    }

// ---------------------------------------------------------
// CGprsConnectionInfo::RefreshDetailsL
// ---------------------------------------------------------
//
void CGprsConnectionInfo::RefreshDetailsL()
    {
    CMUILOGGER_WRITE( "CGprsConnectionInfo::RefreshDetailsL start" );

    iActiveWrapper->StartGetStringAttribute( iConnectionId,
                                             iConnectionMonitor,
                                             KAccessPointName,
                                             iApName );
#ifdef  __WINS__
    iActiveWrapper->Cancel();
    iApName = _L( "LAN" );
#else
    TInt err( iActiveWrapper->iStatus.Int() );
    CMUILOGGER_WRITE_F( "CGprsConnectionInfo::RefreshDetailsL status: %d",
                        err );
    if ( err != KErrNone )
        {
        User::Leave( err );
        }
#endif
    CMUILOGGER_WRITE_F( "iApName Connection name: %S", &iApName );
          
    RefreshTransferSpeedsL();
    RefreshDuration();
    CMUILOGGER_WRITE( "CGprsConnectionInfo::RefreshDetailsL end" );
    }

// ---------------------------------------------------------
// CGprsConnectionInfo::ToStringApNameLC
// ---------------------------------------------------------
//
HBufC* CGprsConnectionInfo::ToStringApNameLC() const
    {
    HBufC* apName = iApName.AllocLC();
    return apName;    
    }


// ---------------------------------------------------------
// CGprsConnectionInfo::RefreshConnectionListBoxItemTextL
// ---------------------------------------------------------
//
void CGprsConnectionInfo::RefreshConnectionListBoxItemTextL()
    {
    CMUILOGGER_WRITE( 
        "CGprsConnectionInfo::RefreshConnectionListBoxItemTextL start" );

    TUint  iconId;
    HBufC* secondRow = NULL;
    
    iconId = GetIconId();

    if ( iConnectionStatus == EConnectionCreated )
        {
        CDesCArrayFlat* array = new (ELeave) CDesCArrayFlat(2);
        CleanupStack::PushL( array );
      
        HBufC* stringReceivedData = ToStringReceivedDataLC( ETrue );
        HBufC* stringSentData = ToStringSentDataLC( ETrue );

        StringMarkerRemoval( stringReceivedData );
        StringMarkerRemoval( stringSentData );
        
        array->AppendL( *stringReceivedData );
        array->AppendL( *stringSentData );

        secondRow = StringLoader::LoadL( R_QTN_CMON_UL_DL_DATA_AMOUNTS, 
                                         *array );

        CleanupStack::PopAndDestroy( stringSentData );
        CleanupStack::PopAndDestroy( stringReceivedData );
        CleanupStack::PopAndDestroy( array );
        }
    else // if connection has not created yet gives back the status of its.
        {
        secondRow = ToStringStatusLC( EFalse );
        CleanupStack::Pop( secondRow ); 
        }

    iListBoxItemText.Format( KConnectonListItemTextFormat, iconId, 
                             &iConnectionName, secondRow );
    delete secondRow;
    CMUILOGGER_WRITE( 
        "CGprsConnectionInfo::RefreshConnectionListBoxItemTextL end" );
    }

// ---------------------------------------------------------
// CGprsConnectionInfo::RefreshDetailsArrayL
// ---------------------------------------------------------
//
void CGprsConnectionInfo::RefreshDetailsArrayL()
    {
    CMUILOGGER_WRITE( "CGprsConnectionInfo::RefreshDetailsArrayL start" );
    if ( iDetailsArray )
        {
        TBool internal = iConnectionBearerType < EBearerExternalCSD ;   
        HBufC* temp = NULL;

        temp = ToStringStatusLC();
        ToDetailsListBoxItemTextWithReplaceL( R_QTN_CMON_HEADING_STATUS,
                                              temp, 2 );

        ToDetailsListBoxItemTextWithReplaceL( R_QTN_CMON_HEADING_DATA_TOTAL,
                                              ToStringTotalTransmittedDataLC(),
                                              3 );
        ToDetailsListBoxItemTextWithReplaceL
            (
            R_QTN_CMON_HEADING_DATA_RECEIVED,
            ToStringReceivedDataLC(),
            4
            );                                              

        ToDetailsListBoxItemTextWithReplaceL( R_QTN_CMON_HEADING_DATA_SENT,
                                              ToStringSentDataLC(), 5 );
    
        ToDetailsListBoxItemTextWithReplaceL( R_QTN_CMON_HEADING_DURATION,
                                              ToStringDurationLC(), 6 );
        
        ToDetailsListBoxItemTextWithReplaceL
            (
            R_QTN_CMON_HEADING_SPEED,
            ToStringTransferSpeedDownLC(),
            7
            );

        ToDetailsListBoxItemTextWithReplaceL
            (
            0, 
            ToStringTransferSpeedUpLC(),
            8
            );
    
        CleanupStack::PopAndDestroy( 7, temp );   // ToString...LC()
    
        if ( internal )
            {
            TInt sharing = RefreshAppNamesL();
                
            if ( sharing > 1 )
                {
                if ( iDetailsArray->Count() > 10 )
                    {                
                    iDetailsArray->Delete( 10, 
                                           iDetailsArray->Count() - 10 );
                    iDetailsArray->Compress();
                    }

                for ( TInt i = 0; i < sharing; i++ )
                    {
                    if ( i == 0 )
                        {
                        ToDetailsListBoxItemTextWithAppendL( 
                                        R_QTN_CMON_HEADING_SHARING_INFO,
                                        ToStringAppNameLC( i ) );
                        }
                    else
                        {
                        ToDetailsListBoxItemTextWithAppendL( 0, 
                                                    ToStringAppNameLC( i ) );
                        }
                    }
                CleanupStack::PopAndDestroy( sharing ); 
                                                    // ToStringAppNameLC()
                }
            else
                {
                if ( iDetailsArray->Count() > 10 )
                    {
                    iDetailsArray->Delete( 10, iDetailsArray->Count() - 10 );
                    iDetailsArray->Compress();
                    }
                }
            }
        }
    CMUILOGGER_WRITE( "CGprsConnectionInfo::RefreshDetailsArrayL end" );    
    }


// ---------------------------------------------------------
// CGprsConnectionInfo::ToArrayDetailsL
// ---------------------------------------------------------
//
void CGprsConnectionInfo::ToArrayDetailsL()
    {
    CMUILOGGER_ENTERFN("CGprsConnectionInfo::ToArrayDetailsL");
    TBool internal = iConnectionBearerType < EBearerExternalCSD ;
    TUint granularity = KDetailsArrayGranularityExternal;
    HBufC* temp = NULL;


    if ( internal )
        {
        granularity = KDetailsArrayGranularityInternal;
        }
    delete iDetailsArray;
    iDetailsArray = NULL;
    iDetailsArray = new ( ELeave ) CDesCArrayFlat( granularity );
  
    temp = iConnectionName.AllocLC();

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_CONN_NAME,
                                         temp );

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_BEARER,
                                         ToStringBearerLC() );

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_STATUS,
                                         ToStringStatusLC() );
    
    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DATA_TOTAL,
                                         ToStringTotalTransmittedDataLC() );

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DATA_RECEIVED,
                                         ToStringReceivedDataLC() );

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DATA_SENT,
                                         ToStringSentDataLC() );
    
    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DURATION,
                                         ToStringDurationLC() );
        
    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_SPEED,
                                         ToStringTransferSpeedDownLC() );

    ToDetailsListBoxItemTextWithAppendL( 0, 
                                         ToStringTransferSpeedUpLC() );
    
    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_GPRS_APN,
                                         ToStringApNameLC() );
    CleanupStack::PopAndDestroy( 10, temp );   // ToString...LC()
    
    if ( internal )
        {
        TInt sharing = RefreshAppNamesL();

        if ( sharing > 1 )
            {
            for ( TInt i = 0; i < sharing; i++ )
                {
                if ( i == 0 )
                    {
                    ToDetailsListBoxItemTextWithAppendL( 
                                    R_QTN_CMON_HEADING_SHARING_INFO,
                                    ToStringAppNameLC( i ) );
                    }
                else
                    {
                    ToDetailsListBoxItemTextWithAppendL( 0, 
                                                ToStringAppNameLC( i ) );
                    }
                }
            CleanupStack::PopAndDestroy( sharing ); 
                                                    // ToStringAppNameLC()
            }
        }
    CMUILOGGER_LEAVEFN("CGprsConnectionInfo::ToArrayDetailsL");
    }


// End of File