connectionmonitoring/connectionmonitorui/src/CsdConnectionInfo.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:59:48 +0300
branchRCL_3
changeset 69 cf1b3ddbe9a1
parent 58 83ca720e2b9a
permissions -rw-r--r--
Revision: 201039 Kit: 201041

/*
* 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 connection
*
*
*/


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

#include "ConnectionMonitorUiLogger.h"
#include "CsdConnectionInfo.h"
#include "ActiveWrapper.h"

// CONSTANTS

LOCAL_D const TUint KDetailsArrayGranularityInternal = 9;
LOCAL_D const TUint KDetailsArrayGranularityExternal = 4;

// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CCsdConnectionInfo::NewL
// ---------------------------------------------------------
//
CCsdConnectionInfo* CCsdConnectionInfo::NewL( TInt aConnectionId,
                              RConnectionMonitor* const aConnectionMonitor,
                              TConnMonBearerType aConnectionBearerType,
                              CActiveWrapper* aActiveWrapper )
    {
    CMUILOGGER_WRITE( "NewL, CCsdsConnectionInfo - start " );

    CCsdConnectionInfo* self = new ( ELeave ) CCsdConnectionInfo(
                                                    aConnectionId,
                                                    aConnectionMonitor,
                                                    aConnectionBearerType,
                                                    aActiveWrapper );
    CMUILOGGER_WRITE( "NewL, CCsdsConnectionInfo - created " );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    CMUILOGGER_WRITE( "NewL, CCsdsConnectionInfo - end " );
    return self;
    }


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


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


// ---------------------------------------------------------
// CCsdConnectionInfo::ConstructL
// ---------------------------------------------------------
//
void CCsdConnectionInfo::ConstructL()
    {
    CMUILOGGER_WRITE( "CCsdConnectionInfo::ConstructL() start" );
    
    iActiveWrapper->StartGetStringAttribute( iConnectionId,
                                             iConnectionMonitor,
                                             KTelNumber,
                                             iDialupNumber );
    TInt err( iActiveWrapper->iStatus.Int() );
    CMUILOGGER_WRITE_F( "CCsdConnectionInfo::ConstructL() status: %d",
                        err );
    if ( err != KErrNone )
        {
        User::Leave( err );
        }
        
    CConnectionInfoBase::ConstructL();
    CMUILOGGER_WRITE( "CCsdConnectionInfo::ConstructL() end" );
    }


// ---------------------------------------------------------
// CCsdConnectionInfo::DeepCopyL
// ---------------------------------------------------------
//        
CConnectionInfoBase* CCsdConnectionInfo::DeepCopyL()
	{
	CCsdConnectionInfo* temp = new ( ELeave ) CCsdConnectionInfo(
                                                    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->iDialupNumber = iDialupNumber;
		
	if ( iDetailsArray )
		{
		CleanupStack::PushL( temp );		
		temp->ToArrayDetailsL();
		CleanupStack::Pop( temp );			
		}
		
	return temp;	
	}


// ---------------------------------------------------------
// CCsdConnectionInfo::GetIconId
// ---------------------------------------------------------
//
TUint CCsdConnectionInfo::GetIconId() const
    {
    TUint iconId = ECsd;
    if ( ( iConnectionBearerType == EBearerHSCSD ) || 
         ( iConnectionBearerType == EBearerExternalHSCSD ) )
        {
        iconId = EHscsd;
        }
    return iconId;
    }

// ---------------------------------------------------------
// CCsdConnectionInfo::RefreshDetailsL
// ---------------------------------------------------------
//
void CCsdConnectionInfo::RefreshDetailsL()
    {
    CMUILOGGER_WRITE( "CCsdConnectionInfo::RefreshDetailsL start" );
    
    CMUILOGGER_WRITE_F( "before iConnectionBearerType: %d", 
                        ( TInt )iConnectionBearerType );
    
    TConnMonBearerType bearerType;
    
    iActiveWrapper->StartGetIntAttribute( iConnectionId,
                                          iConnectionMonitor,
                                          KBearer,
                                          ( TInt& )bearerType );
        
    if ( !iActiveWrapper->iStatus.Int() )
        {
        iConnectionBearerType = bearerType;
        }
    
    CMUILOGGER_WRITE_F( "status.Int(): %d", iActiveWrapper->iStatus.Int() );
    CMUILOGGER_WRITE_F( "bearerType: %d", ( TInt )bearerType );    
    CMUILOGGER_WRITE_F( "after iConnectionBearerType: %d", ( TInt )iConnectionBearerType );
    
    if ( iConnectionBearerType < EBearerExternalCSD )
        {
        RefreshTransferSpeedsL();
        }
    RefreshDuration();
    CMUILOGGER_WRITE( "CCsdConnectionInfo::RefreshDetailsL end" );
    }

// ---------------------------------------------------------
// CCsdConnectionInfo::ToStringDialupNumberLC
// ---------------------------------------------------------
//
HBufC* CCsdConnectionInfo::ToStringDialupNumberLC() const
    {
    HBufC* dialupNumber = iDialupNumber.AllocLC();
    TPtr temp( dialupNumber->Des() );
    AknTextUtils::DisplayTextLanguageSpecificNumberConversion( temp );
    
    return dialupNumber;
    }


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

    TUint  iconId;
    HBufC* secondRow = NULL;

    iconId = GetIconId();

    if ( iConnectionStatus == EConnectionCreated )
        {
        secondRow =  ToStringDurationLC();
        }
    else    // if connection has not created yet gives back the status of its.
        {
        secondRow = ToStringStatusLC( EFalse );
        }

    iListBoxItemText.Format( KConnectonListItemTextFormat, iconId,
                             &iConnectionName, secondRow );
    CleanupStack::PopAndDestroy( secondRow );
    CMUILOGGER_WRITE(
        "CCsdConnectionInfo::RefreshConnectionListBoxItemTextL end" );
    }


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

        if ( internal )
            {
            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()

            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();
                    }
                }
            }
        else
            {
            ToDetailsListBoxItemTextWithReplaceL( R_QTN_CMON_HEADING_DURATION,
                                                  ToStringDurationLC(), 2 );
            CleanupStack::PopAndDestroy( 1 );   // ToStringDurationLC()
            }
        }
    CMUILOGGER_WRITE( "CCsdConnectionInfo::RefreshDetailsArrayL end" );
    }


// ---------------------------------------------------------
// CCsdConnectionInfo::ToArrayDetailsL
// ---------------------------------------------------------
//
void CCsdConnectionInfo::ToArrayDetailsL()
    {
    CMUILOGGER_ENTERFN("CCsdConnectionInfo::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() );
    CleanupStack::PopAndDestroy( 2, temp );   // ToString...LC()


    if ( internal )
        {
        temp = ToStringStatusLC();
        ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_STATUS,
                                             temp );

        ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DATA_TOTAL,
                                             ToStringTotalTransmittedDataLC() );
                                             
        ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DATA_RECEIVED,
                                             ToStringReceivedDataLC() );

        ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DATA_SENT,
                                             ToStringSentDataLC() );
        CleanupStack::PopAndDestroy( 4, temp );   // ToString...LC()
        }

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_DURATION,
                                         ToStringDurationLC() );
    CleanupStack::PopAndDestroy( 1 );   // ToStringDurationLC()

    if ( internal )
        {
        temp = ToStringTransferSpeedDownLC();

        ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_SPEED,
                                             temp );

        ToDetailsListBoxItemTextWithAppendL( 0, 
                                             ToStringTransferSpeedUpLC() );
        CleanupStack::PopAndDestroy( 2, temp );   // ToString...LC()
        }

    ToDetailsListBoxItemTextWithAppendL( R_QTN_CMON_HEADING_CSD_NUMBER,
                                         ToStringDialupNumberLC() );
    CleanupStack::PopAndDestroy( 1 );   // ToStringDialupNumberLC()

    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("CCsdConnectionInfo::ToArrayDetailsL");
    }



// End of File