convergedcallengine/serviceselector/src/cssservicehandlervoip.cpp
changeset 51 12bc758d6a02
parent 48 78df25012fda
child 53 25b8d29b7c59
--- a/convergedcallengine/serviceselector/src/cssservicehandlervoip.cpp	Fri Sep 17 17:09:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,496 +0,0 @@
-/*
-* Copyright (c) 2008 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:  This module contains the implementation of 
-*              : CSsServiceHandlerVoip class
-*
-*/
-
-
-//  INCLUDE FILES
-#include "cssservicehandlervoip.h"
-#include "cssconnectionhandler.h"
-#include "cssuiutilities.h"
-#include "cssserviceutilities.h"
-#include "csssettingshandler.h"
-#include "cssbshandler.h"
-#include "csslogger.h"
-#include <serviceselector.rsg>
-#include <spdefinitions.h>
-#include <spsettingsvoiputils.h>
-#include <data_caging_path_literals.hrh>
-#include <eikenv.h>
-
-
-// CONSTANTS
-// Selection list array granularity
-const TInt KSsArrayGranularity = 2;
-// CS service id
-const TInt KGSMServiceId = 1;
-// List item array size
-const TInt KSsLbxItemsArraySize = 3;
-// Format of the selection list query.
-_LIT( KQueryItemFormat, "%d\t%S" );
-// Branding id
-const TInt KSsBrandingIdLength = 512;
-// Integer length
-const TInt KSsIntegerLength = 10;
-
-
-// ================= MEMBER FUNCTIONS =======================================
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::CSsServiceHandlerVoip
-// C++ constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CSsServiceHandlerVoip::CSsServiceHandlerVoip
-        ( 
-        // None.
-        )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::ConstructL()
-    {
-    iConnectionHandler = CSsConnectionHandler::NewL();
-    iVoipUtils = CSPSettingsVoIPUtils::NewL();
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CSsServiceHandlerVoip* CSsServiceHandlerVoip::NewL
-        ( 
-        // None.
-        )
-    {
-    CSsServiceHandlerVoip* self = new ( ELeave ) CSsServiceHandlerVoip();
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// Destructor
-CSsServiceHandlerVoip::~CSsServiceHandlerVoip
-        (
-        // None.
-        )
-    {
-    delete iVoipUtils;
-    delete iConnectionHandler;
-    delete iUiUtils;
-    delete iSettings;
-    delete iBsHandler;
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::ExecuteServiceSelectionL
-// Gets the calling service by current call type and service id.
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::ExecuteServiceSelectionL
-        ( 
-        CConvergedServiceSelector::TSsResult& aResult, 
-        CConvergedServiceSelector::TSsCallType /*aCallType*/,
-        TUint aServiceId,
-        TBool aSendKey,
-        const TDesC& aString 
-        )
-    {
-    CSSLOGSTRING("CSSelector::ExecuteVoip");
-    
-    if ( 0 != aServiceId && KGSMServiceId != aServiceId )
-        {
-        // Service id is known, just set correct calltype
-        // and registration status.
-        GetServiceByServiceId( aResult, aServiceId, aSendKey, aString );
-        }
-    else
-        {
-        // Service id is not known or CS service
-        // so we have to choce from available voip services.
-        GetCallingServiceL( aResult );
-        }
-
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::GetServiceByServiceId
-// Gets calling service by known service id.
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::GetServiceByServiceId
-        ( 
-        CConvergedServiceSelector::TSsResult& aResult, 
-        TUint aServiceId,
-        TBool aSendKey,
-        const TDesC& aString
-        ) const
-    {
-    if ( aSendKey && ChangeTypeAsCsVoice( aServiceId, aString ) )
-        {
-        // Set (CS)voice call parameters
-        // CallType, Service id and GSM service is always "enabled"
-        SsServiceUtilities::SetServiceResult( 
-                aResult,
-                CConvergedServiceSelector::ESsVoiceCall,
-                KGSMServiceId,
-                ETrue ); 
-        }
-    else
-        {
-        // Get current registration status for the service.
-        // This may be unnecessary at the moment because we don't show  
-        // "Register now?" note anymore and currently clients don't use the 
-        // registration status for anything.
-        TBool registered( iConnectionHandler->IsVoipServiceRegistered( 
-                                                            aServiceId ) );
-    
-        // Set results    
-        SsServiceUtilities::SetServiceResult( 
-                aResult,
-                CConvergedServiceSelector::ESsVoipCall,
-                aServiceId,
-                registered );
-        }
-    }
-            
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::GetCallingServiceL
-// Gets calling service without service id.
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::GetCallingServiceL
-        ( 
-        CConvergedServiceSelector::TSsResult& aResult
-        )
-    {
-    TInt error( KErrNone );
-    TBool registered( EFalse );
-    RArray<TUint> services;
-    CleanupClosePushL( services );
-    
-    // First try to find registered services to be used if not any available
-    // then try to find unregistered services.
-    error = SettingsHandlerL().GetRegisteredServices( 
-                *iConnectionHandler, services );
-    
-    if ( KErrNone != error )
-        {
-        error = SettingsHandlerL().GetAllServices( services );
-        }
-    else
-        {
-        registered = ETrue;
-        }
-    
-    CSSLOGSTRING2("CSSelector::Service error:%d", error);
-    if ( KErrNone != error )
-        {
-        CSSLOGSTRING("CSSelector::Services not available");
-        if ( KErrNoMemory == error )
-            {
-            User::Leave( error );
-            }
-        // No voip services available/configured. 
-        // Launch information note and leave.
-        UiUtilitiesL().ShowInformationNoteL( R_NO_SERVICE_AVAILABLE );
-        User::Leave( KErrNotFound );
-        }
-
-   
-    // Select service. Show list query
-    // if more than one services available.
-    SelectServiceL( aResult,
-                    services,
-                    registered );
-    
-    CleanupStack::PopAndDestroy( &services );
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::SelectServiceL
-// Makes service selection.
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::SelectServiceL
-        ( 
-        CConvergedServiceSelector::TSsResult& aResult, 
-        RArray<TUint>& aServices,
-        TBool aRegistered 
-        )
-    {
-    CSSLOGSTRING2("CSSelector::Service count:%d",aServices.Count());
-    if ( 0 == aServices.Count() )
-        {
-        // Empty array, leave
-        User::Leave( KErrNotFound );
-        }
-    
-    TUint serviceId( 0 );
-    if ( 1 < aServices.Count() )
-        {
-        // Because more than one service available we have to
-        // make selection list for the user.
-        TInt index( KErrNotFound );
-
-        CDesCArrayFlat* lbxItems =
-            new (ELeave) CDesCArrayFlat( KSsLbxItemsArraySize );
-        CleanupStack::PushL( lbxItems );
-        CArrayPtr<CGulIcon>* icons =
-            new (ELeave) CAknIconArray( KSsLbxItemsArraySize );
-        CleanupStack::PushL( icons );
-        
-        GetListBoxItemsAndIconsL( aServices,
-                                  lbxItems,
-                                  icons );
-        
-        // List query takes ownership for icon array
-        CleanupStack::Pop( icons );
-        
-        // Select service by list query
-        TBool ret = UiUtilitiesL().ShowListQueryL( 
-                index, R_PHONE_VOIP_CALL_TYPE_QUERY, lbxItems, icons );
-
-        CSSLOGSTRING2("CSSelector::Service list ret:%d", ret);
-        CSSLOGSTRING2("CSSelector::Service list index:%d", index);
-        
-        
-        // Make sure that the index is on the correct range and user has 
-        // not canceled the list query.
-        if ( !ret || ( index < 0 || index >= aServices.Count() ) )
-            {
-            // User cancels the query -> leave
-            User::Leave( KErrCancel );
-            }
-        
-        CleanupStack::PopAndDestroy( lbxItems );
-        
-        // Use the selected service.
-        serviceId = aServices[index];
-        }
-    else
-        {
-        // One service available, use it.
-        serviceId = aServices[0];
-        }
-    
-    
-    // Set results    
-    SsServiceUtilities::SetServiceResult( 
-            aResult,
-            CConvergedServiceSelector::ESsVoipCall,
-            serviceId,
-            aRegistered );
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::UiUtilitiesL
-// Returns uiutilities reference.
-// -----------------------------------------------------------------------------
-//
-CSsUiUtilities& CSsServiceHandlerVoip::UiUtilitiesL() 
-    {
-    if ( !iUiUtils )
-        {
-        // Create uiutils for ui dialogs.
-        // UiUtils is created only for the real need.
-        iUiUtils = CSsUiUtilities::NewL();
-        }
-    
-    return *iUiUtils;
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::SettingsHandlerL
-// Returns settings handler reference.
-// -----------------------------------------------------------------------------
-//
-CSsSettingsHandler& CSsServiceHandlerVoip::SettingsHandlerL() 
-    {
-    if ( !iSettings )
-        {
-        // Create settings handler
-        iSettings = CSsSettingsHandler::NewL();
-        }
-    
-    return *iSettings;
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::BrandingHandlerL
-// Returns settings handler reference.
-// -----------------------------------------------------------------------------
-//
-CSsBsHandler& CSsServiceHandlerVoip::BrandingHandlerL() 
-    {
-    if ( !iBsHandler )
-        {
-        // Create settings handler
-        iBsHandler = CSsBsHandler::NewL();
-        }
-    
-    return *iBsHandler;
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::ChangeTypeAsCsVoice
-// Checks should voip call type be changed as cs voice.
-// -----------------------------------------------------------------------------
-//
-TBool CSsServiceHandlerVoip::ChangeTypeAsCsVoice
-        ( 
-        TUint aServiceId,
-        const TDesC& aString
-        ) const
-    {
-    TBool csCall( EFalse );
-    TUint prefService( 0 );
-    
-    if ( SsServiceUtilities::IsValidCsNumber( aString ) &&
-         iVoipUtils->IsPreferredTelephonyVoIP() &&
-         KErrNone == iVoipUtils->GetPreferredService( prefService ) )
-        {
-        csCall = prefService == aServiceId &&
-                 !iConnectionHandler->IsVoipServiceRegistered( aServiceId );
-            
-        }
-    
-    return csCall;
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::AddBrandIconL
-//
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::AddBrandIconL
-        (
-        CArrayPtr<CGulIcon>* aIcons,
-        TUint aServiceId,
-        TInt& aIconId 
-        )
-    {
-    CFbsBitmap* brandedBitmap = NULL;
-    CFbsBitmap* brandedBitmapMask = NULL;
-
-    // Get branded bitmap
-    TRAPD( err, GetBrandIconL( aServiceId,
-                               brandedBitmap, 
-                               brandedBitmapMask ) );
-
-    if ( KErrNone == err )
-        {
-        // The count of list icons(before adding branding icon to the list)
-        // must be the branded icon list id
-        aIconId = aIcons->Count();
-        // Create new icon and add it to the icon list
-        CGulIcon* icon = CGulIcon::NewL( brandedBitmap, brandedBitmapMask );
-        CleanupStack::PushL( icon );
-        aIcons->AppendL( icon );
-        CleanupStack::Pop( icon );
-        }
-    else
-        {
-        // Use default icon for this service
-        aIconId = 0;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::GetListBoxItemsAndIconsL
-//
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::GetListBoxItemsAndIconsL
-        (
-        RArray<TUint>& aServices,
-        CDesCArrayFlat* aLbxItems,
-        CArrayPtr<CGulIcon>* aIcons       
-        )
-    {
-    CDesCArray* names = new(ELeave) CDesCArrayFlat( KSsArrayGranularity );
-    CleanupStack::PushL( names );
-    
-    // Load default listbox icon
-    UiUtilitiesL().LoadDefaultIconL( *aIcons );
-    
-    // Get service names by service id array
-    SettingsHandlerL().GetServiceNamesL( aServices, *names );
-
-    for ( TInt i=0; i< aServices.Count() && 
-            names->MdcaCount() == aServices.Count(); i++ )
-        {
-        RBuf16 buf;
-        CleanupClosePushL( buf );
-        TInt iconId( KErrNotFound );
-        
-        // Add brand icon. Default is used if brand icon not found
-        AddBrandIconL( aIcons, aServices[ i ], iconId );
-
-        HBufC* name = HBufC::NewLC( names->MdcaPoint(i).Length() );
-        name->Des().Copy( names->MdcaPoint(i) );
-        
-        buf.CreateL( names->MdcaPoint(i).Length() +
-                     KQueryItemFormat().Length() +
-                     KSsIntegerLength );
-        
-        // Create final list box item data.
-        buf.Format( KQueryItemFormat, iconId, name );
-       
-        //Append text to the item array.
-        aLbxItems->AppendL( buf );
-        
-        CleanupStack::PopAndDestroy( name );
-        CleanupStack::PopAndDestroy( &buf );
-        }
-
-    CleanupStack::PopAndDestroy( names );
-    }
-
-// -----------------------------------------------------------------------------
-// CSsServiceHandlerVoip::GetBrandIconL
-//
-// -----------------------------------------------------------------------------
-//
-void CSsServiceHandlerVoip::GetBrandIconL
-        (
-        TUint aServiceId,
-        CFbsBitmap*& aBrandedBitmap,
-        CFbsBitmap*& aBrandedBitmapMask  
-        )
-    {
-    TBuf8<KSsBrandingIdLength> brandId( KNullDesC8 );
-
-    SettingsHandlerL().BrandIdL( aServiceId, brandId );
-
-    // Get branded bitmap
-    BrandingHandlerL().GetBrandedIconL( brandId, 
-                                        aBrandedBitmap, 
-                                        aBrandedBitmapMask );
-    }
-
-
-// ================= OTHER EXPORTED FUNCTIONS ===============================
-
-//  End of File