diff -r 78df25012fda -r 12bc758d6a02 convergedcallengine/serviceselector/src/cssservicehandlervoip.cpp --- 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 -#include -#include -#include -#include - - -// 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 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& 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* 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* 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& aServices, - CDesCArrayFlat* aLbxItems, - CArrayPtr* 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 brandId( KNullDesC8 ); - - SettingsHandlerL().BrandIdL( aServiceId, brandId ); - - // Get branded bitmap - BrandingHandlerL().GetBrandedIconL( brandId, - aBrandedBitmap, - aBrandedBitmapMask ); - } - - -// ================= OTHER EXPORTED FUNCTIONS =============================== - -// End of File