locationsystemui/locationsysui/locsuplsettingsui/src/locsuplsettingslbmodel.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:06:48 +0200
changeset 0 667063e416a2
child 49 10852b179f64
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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:  List box for the SUPL Settings UI
*
*/


// System Includes
#include <e32keys.h>
#include <locsuplsettingsui.rsg>
#include <avkon.rsg>
#include <StringLoader.h>
#include <centralrepository.h>
#include <epos_csuplsettings.h>


// User Include
#include "locsuplsettingslbmodel.h"
#include "locsuplsettingsuiengine.h"
#include "locsuplsettingsprivatecrkeys.h"
#include "epos_omasuplconfigurationkeys.h"
#include "locsupldebug.h"
		  					   	  
// Constants

const TInt KMaxConversionBufferLength = 0x200;

_LIT( KDefaultServerIPAddress, " " );

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

// ---------------------------------------------------------------------------
// CLocSUPLSettingsLBModel::CLocSUPLSettingsLBModel
// Default Constructor
//
// ---------------------------------------------------------------------------
//
CLocSUPLSettingsLBModel::CLocSUPLSettingsLBModel( 
                            CLocSUPLSettingsUiEngine& aEngine )
    :iEngine( aEngine )
	{		
	}

// ---------------------------------------------------------------------------
// CLocSUPLSettingsLBModel::~CLocSUPLSettingsLBModel
// Destructor
//
// ---------------------------------------------------------------------------
//
CLocSUPLSettingsLBModel::~CLocSUPLSettingsLBModel()
	{	
	DEBUG( + CLocSUPLSettingsLBModel::~CLocSUPLSettingsLBModel );	
	// Delete the Buffers
	delete iBuffer;
	iBuffer = NULL;
	
	delete iServerDetailTitle;
	iServerDetailTitle = NULL;
	
	delete iSuplUsageTitle;
	iSuplUsageTitle = NULL;
	
	delete iSuplServerDetail;
	iSuplServerDetail = NULL;

	delete iDefaultSuplUsage;
	iDefaultSuplUsage = NULL;
	DEBUG( - CLocSUPLSettingsLBModel::~CLocSUPLSettingsLBModel );	
	}
	
// ---------------------------------------------------------------------------
// CLocSUPLSettingsLBModel* CLocSUPLSettingsLBModel::NewL
// Two-phased constructor
// 
// @param  aEngine                  Reference the SUPL Settings Engine 
// @return CLocSUPLSettingsLBModel*	Reference to the object created
//
// ---------------------------------------------------------------------------
//
CLocSUPLSettingsLBModel* CLocSUPLSettingsLBModel::NewL( 
                                    CLocSUPLSettingsUiEngine& aEngine )
	{
	DEBUG( + CLocSUPLSettingsLBModel::NewL );	
	CLocSUPLSettingsLBModel* self = CLocSUPLSettingsLBModel::NewLC( aEngine );
	CleanupStack::Pop( self );
	DEBUG( - CLocSUPLSettingsLBModel::NewL );	
	return self;
	}

// ---------------------------------------------------------------------------
// CLocSUPLSettingsLBModel* CLocSUPLSettingsLBModel::NewLC
// Two-phased constructor
// 
// @param  aEngine                  Reference the SUPL Settings Engine 
// @return CLocSUPLSettingsLBModel*	Reference to the object created
//
// ---------------------------------------------------------------------------
//
CLocSUPLSettingsLBModel* CLocSUPLSettingsLBModel::NewLC( 
                                    CLocSUPLSettingsUiEngine& aEngine )
	{
	CLocSUPLSettingsLBModel* self = 
	                new( ELeave )CLocSUPLSettingsLBModel( aEngine );
	CleanupStack::PushL( self );
	self->ConstructL();
	return self;
	}
		
// ---------------------------------------------------------------------------
// void CLocSUPLSettingsLBModel::ConstructL
// Second Phase of the two phase constructor.
// 
// ---------------------------------------------------------------------------
//
void CLocSUPLSettingsLBModel::ConstructL()
	{
	DEBUG( + CLocSUPLSettingsLBModel::ConstructL );	
    // Allocate the Conversion Buffer
	iBuffer = HBufC16::NewL( KMaxConversionBufferLength ); 
	 
	// Read the Local Variation Key and set the Item count
	TInt flagValue = 0;
	CRepository* repository = CRepository::NewLC( TUid::Uid( KCRUidLocSuplSettingsUi ) );
	repository->Get( KLocSuplSettingsLVFlags, flagValue );
	CleanupStack::PopAndDestroy( repository );
	repository = NULL;	
	if( flagValue )
	    {
	    iServerAddressPresent = ETrue;
	       
     	// Allocate and set the server ip address title field
    	iServerDetailTitle = StringLoader::LoadL( R_LOC_SUPL_SERVER_DETAIL );
    	 
    	// Allocate the Default IP address
    	iSuplServerDetail = HBufC16::NewL( KDefaultServerIPAddress().Length() );
    	TPtr16 ptr( iSuplServerDetail->Des() );
    	ptr.Copy( KDefaultServerIPAddress );		       
	    }
    
    // Reinitializing the flag value
    flagValue = 0;
    TRAPD( error, repository = CRepository::NewL( KCRUidOMASuplConfiguration ) );
    if ( !error )
        {
        error = repository->Get( KOMASuplConfigurationSuplPermissionQueryUsage, flagValue );
        if ( error || flagValue < 0 )
            {
            flagValue = 0;
            }
    	delete repository;
    	repository = NULL;
        }	
	    	    
	// Check for SUPL Setting usage variationing.
	if( flagValue )
	    {
	    iSuplUsagePresent = ETrue;
	       
     	// Allocate and set the server ip address title field
    	iSuplUsageTitle = StringLoader::LoadL( R_LOC_SUPL_USE );
    	
    	iDefaultSuplUsage =  StringLoader::LoadL( R_AVKON_SELEC_SETT_VAL_FIELD_NONE );
    	// Default value can be used for this field as well
    	// So no need to have another variable.		       
	    }
	    	
	DEBUG( - CLocSUPLSettingsLBModel::ConstructL );	
	}

// ---------------------------------------------------------------------------
// TSUPLSettingsItemId CLocSUPLSettingsLBModel::ResolveSettingsItem
// Packs the server address to the end of the buffer passed.
//
// @param  aPtr Buffer to which the server address needs to be appended.
// ---------------------------------------------------------------------------
//
CLocSUPLSettingsLBModel::TSUPLSettingsItemId 
    CLocSUPLSettingsLBModel::ResolveSettingsItem( TInt aListboxIndex ) const
    {
 	DEBUG( + CLocSUPLSettingsLBModel::ResolveSettingsItem );	
   	TSUPLSettingsItemId selectedItem = ESUPLSettingsUsage;
    
    switch ( aListboxIndex )
        {
        case 0:
            {
            selectedItem = ESUPLSettingsUsage;
            break;
            }        
        case 1:
            {
            selectedItem = ESUPLSettingsServersDetail;
            break;
            }
        case 2:
            {
            selectedItem = ESUPLSettingsActiveSessions;
            break;   
            }
        default:
            {
            break;            
            }
        }
	DEBUG( - CLocSUPLSettingsLBModel::ResolveSettingsItem );	
    return selectedItem;
    }
        
// ---------------------------------------------------------------------------
// TInt CLocSUPLSettingsLBModel::MdcaCount() const
// Inherited from MDesCArray. Returns the total number of items in the 
// Settings description array
//
// @return TInt The total number of elements in the Settings Description array
// ---------------------------------------------------------------------------
//
TInt CLocSUPLSettingsLBModel::MdcaCount() const
	{
	DEBUG( + CLocSUPLSettingsLBModel::MdcaCount );	
	// Initialize the count to 0 
	TInt itemCount = 0;
	
	// Check for SUPL usage.
	if ( iSuplUsagePresent )
	    {
	    itemCount++;
	    // Check if the usage value is disabled
	    if ( iEngine.GetSuplUsage() == CSuplSettings::ESuplUsageDisabled )
	        {
	        return itemCount;
	        }
		// Check for Server address
		iServerAddressPresent ? itemCount++ : itemCount;	
	    }
	itemCount++; // For the third entry "Active sessions"
	// Check if the SUPL Usage value is Disabled
	// If that is the case then only SUPL usage will be displayed
	DEBUG( - CLocSUPLSettingsLBModel::MdcaCount );	
	return itemCount;
	}

// ---------------------------------------------------------------------------
// TPtrC16 CLocSUPLSettingsLBModel::MdcaPoint() const
// Inherited from MDesCArray. Returns the list box entry corresponding to the 
// index value
//
// @param  aIndex The index whose list box entry needs to be retrieved
// @return TPtr16 The list box description 
// ---------------------------------------------------------------------------
//
TPtrC16 CLocSUPLSettingsLBModel::MdcaPoint( TInt aIndex ) const
	{
	DEBUG( + CLocSUPLSettingsLBModel::MdcaPoint );	
	// Zero the internal buffer
	TPtr16 ptr( iBuffer->Des() );
	ptr.Zero();
	
	// CAknSettingStyleListBox
	// Format "\t%S\t\t%S"
	
	// Append the first tab
	ptr.Append( EKeyTab );
	
	TSUPLSettingsItemId index = ResolveSettingsItem( aIndex );		
	switch( index )
	    {
	    case ESUPLSettingsUsage:
	        {
	        AppendSuplUsage( ptr );
	        break;
	        }
	    case ESUPLSettingsServersDetail:
	        {
	        AppendSuplServerDetail( ptr );
	        break;    
	        }
	    case ESUPLSettingsActiveSessions:
	        {
	        TRAP_IGNORE( AppendSuplActiveSessionsDetailL( ptr ) );
	        break;
            }
	    default:
	        {
        	// Append the second tab
        	ptr.Append( EKeyTab );        	
        	// Append the third tab
        	ptr.Append( EKeyTab );
	        break;    
	        }
	    }  
	DEBUG( - CLocSUPLSettingsLBModel::MdcaPoint );	
	return iBuffer->Des();
	}

// ---------------------------------------------------------------------------
// TPtrC16 CLocSUPLSettingsLBModel::AppendSuplServerDetail()
// Packs the server address to the end of the buffer passed.
//
// @param  aPtr Buffer to which the server address needs to be appended.
// ---------------------------------------------------------------------------
//	
void CLocSUPLSettingsLBModel::AppendSuplUsage( TDes& aPtr ) const
    {
	DEBUG( + CLocSUPLSettingsLBModel::AppendSuplUsage );	
    // Append the Title text
    aPtr.Append( iSuplUsageTitle->Des() );
    
    // Append the second tab
	aPtr.Append( EKeyTab ); 
	
	// Append the third tab
	aPtr.Append( EKeyTab );
	
	// Obtain the SUPL usage from the SUPL Settings Engine. If
	// the settings is not set then a Not defined value would be 
	// displayed to the user
    TPtr16 suplUsagePtr( NULL, 0 );
    TRAPD( error, suplUsagePtr.Set( iEngine.GetSuplUsageL() ) );         
    if( error || !suplUsagePtr.Length() )
        {
        // Using the same string as SUPL settings AP
        aPtr.Append( iDefaultSuplUsage->Des() );
        }
    else
        {
        aPtr.Append( suplUsagePtr );              
        }    
	DEBUG( - CLocSUPLSettingsLBModel::AppendSuplUsage );	
    }    

// ---------------------------------------------------------------------------
// TPtrC16 CLocSUPLSettingsLBModel::AppendSuplServerDetail()
// Packs the server address to the end of the buffer passed.
//
// @param  aPtr Buffer to which the server address needs to be appended.
// ---------------------------------------------------------------------------
//	
void CLocSUPLSettingsLBModel::AppendSuplServerDetail( TDes& aPtr ) const
    {
	DEBUG( + CLocSUPLSettingsLBModel::AppendSuplServerDetail );	
    // Append the Title text
    aPtr.Append( iServerDetailTitle->Des() );
    
    // Append the second tab
	aPtr.Append( EKeyTab ); 
	
	// Append the third tab
	aPtr.Append( EKeyTab );

	// Append the forth tab
	aPtr.Append( EKeyTab );	
	DEBUG( - CLocSUPLSettingsLBModel::AppendSuplServerDetail );	
    }
    
// ---------------------------------------------------------------------------
// TPtrC16 CLocSUPLSettingsLBModel::AppendSuplActiveSessionsDetailL()
// Packs the server address to the end of the buffer passed.
//
// @param  aPtr Buffer to which the server address needs to be appended.
// ---------------------------------------------------------------------------
//	
void CLocSUPLSettingsLBModel::AppendSuplActiveSessionsDetailL( TDes& aPtr ) const
    {
	DEBUG( + CLocSUPLSettingsLBModel::AppendSuplActiveSessionsDetailL );	
	
    HBufC16* suplActiveSessionsTitle;
    
    TRAPD( error, iEngine.GetActiveSessionsCountL( iSessionCount ) );
    
	if( !error )
		{
		switch( iSessionCount )
			{
			case 0:
				suplActiveSessionsTitle = StringLoader::LoadL( R_LOC_SUPL_NO_SERVICE );
				break;
			case 1:
				suplActiveSessionsTitle = StringLoader::LoadL( R_LOC_SUPL_SINGLE_SERVICE );
				break;
			default:
				suplActiveSessionsTitle = StringLoader::LoadL( R_LOC_SUPL_MULTIPLE_SERVICES, iSessionCount );
				break;
			}

		if( suplActiveSessionsTitle )
			{
    	    // Append the Title text
	        aPtr.Append( suplActiveSessionsTitle->Des() );
            delete suplActiveSessionsTitle;
	        suplActiveSessionsTitle = NULL;
			}
		}
    
    // Append the second tab
	aPtr.Append( EKeyTab ); 
	
	// Append the third tab
	aPtr.Append( EKeyTab );

	// Append the forth tab
	aPtr.Append( EKeyTab );	
	
	DEBUG( - CLocSUPLSettingsLBModel::AppendSuplActiveSessionsDetailL );	
}
    
// ---------------------------------------------------------------------------
// TInt CLocSUPLSettingsLBModel::ActiveSessionCount()
// Returns the number of Active sessions.
//
// @return  TInt Returns the number of Active sessions count.
// ---------------------------------------------------------------------------
//	
TInt CLocSUPLSettingsLBModel::ActiveSessionCount( ) const
    {
	return iSessionCount;
	}


// End of file