--- a/phoneapp/phoneuivoipextension/src/cphonevcchandler.cpp Fri May 14 15:51:57 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,553 +0,0 @@
-/*
-* Copyright (c) 2008-2009 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: Implementation of CPhoneVccHandler class.
-*
-*/
-
-// INCLUDES
-#include "phoneresourceids.h"
-#include <StringLoader.h>
-#include <avkon.rsg>
-#include <mpeengineinfo.h>
-#include <eikmenup.h>
-#include <vccuipsproperty.h>
-#include "cphonevcchandler.h"
-#include "cphonetimer.h"
-#include "cphonestate.h"
-#include "cphonemainresourceresolver.h"
-#include "phonelogger.h"
-#include "cphonelogger.h"
-#include "mphoneviewcommandhandle.h"
-#include "mphonestatemachine.h"
-#include "phonerssvoip.h"
-#include "phoneappvoipcommands.hrh"
-#include "tphonecmdparamglobalnote.h"
-
-// For HO notification tone setting read
-#include <spproperty.h>
-#include <spsettings.h>
-#include <spentry.h>
-#include <spdefinitions.h>
-
-
-// CONSTANTS
-// 1,5 Second in microseconds
-const TInt KPhoneShowNoteTime = 1500000;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-CPhoneVccHandler::CPhoneVccHandler(
- MPhoneStateMachine& aStateMachine,
- MPhoneViewCommandHandle& aViewCommandHandle ) :
- iStateMachine( aStateMachine ),
- iViewCommandHandle( aViewCommandHandle ), iVccHoReady( ETrue )
- {
- }
-
-// -----------------------------------------------------------
-// CPhoneVccHandler::~CPhoneStateIdleVoIP()
-// Destructor
-// -----------------------------------------------------------
-//
-CPhoneVccHandler::~CPhoneVccHandler()
- {
- delete iPropListener;
- TRAPD( err, CancelHandoverNoteTimerL() );
- if ( err != KErrNone )
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::~CPhoneVccHandler, leave" );
- }
- }
-
-// -----------------------------------------------------------
-// CPhoneVccHandler::ConstructL()
-// Constructor
-// -----------------------------------------------------------
-//
-void CPhoneVccHandler::ConstructL()
- {
- iPropListener = CVccUiPsPropertyListener::NewL( KVccPropKeyHoStatus );
- iPropListener->AddObserverL( *this );
- iPropListener->Start();
- }
-
-// -----------------------------------------------------------
-// CPhoneVccHandler::NewL()
-// Constructor
-// -----------------------------------------------------------
-//
-CPhoneVccHandler* CPhoneVccHandler::NewL(
- MPhoneStateMachine& aStateMachine,
- MPhoneViewCommandHandle& aViewCommandHandle )
- {
- CPhoneVccHandler* self = new (ELeave) CPhoneVccHandler(
- aStateMachine,
- aViewCommandHandle );
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-// -----------------------------------------------------------
-// CPhoneVccHandler::StartManualHandover
-// -----------------------------------------------------------
-//
-void CPhoneVccHandler::StartManualHandoverL( TInt aCommand )
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::StartManualHandoverL()" )
-
- HandoverInProgressNoteL( aCommand );
-
- CVccUiPsProperty* prop = CVccUiPsProperty::NewL();
- CleanupStack::PushL( prop );
-
- if ( aCommand == EPhoneVoIPWaitHandoverFromGsm )
- {
- prop->NotifySubscriberL( EVccManualStartCsToPsHoRequest );
- }
- else
- {
- prop->NotifySubscriberL( EVccManualStartPsToCsHoRequest );
- }
-
- CleanupStack::PopAndDestroy(prop);
- iVccHoReady = EFalse;
- }
-
-// -----------------------------------------------------------
-// CPhoneVccHandler::AddHandoverMenuItem
-// -----------------------------------------------------------
-//
-void CPhoneVccHandler::AddHandoverMenuItemL(
- RArray<CTelMenuExtension::TCallInfo>& aArray,
- TInt /*aResourceId*/,
- CEikMenuPane& aMenuPane )
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::AddHandoverMenuItemL()");
- TInt activeCallId( KErrNotFound );
-
- for( TInt i = 0; i < aArray.Count(); i++ )
- {
- if( aArray[i].iCallState == CTelMenuExtension::EActive )
- {
- activeCallId = aArray[i].iCallId;
- }
- }
-
- if ( activeCallId != KErrNotFound )
- {
- // Vcc not available or Multicall not available
- if ( iVccUnavailable || aArray.Count() > 1 && iNoHoIfMultiCall )
- {
- return;
- }
-
- TPECallType callType =
- iStateMachine.PhoneEngineInfo()->CallType( activeCallId );
-
- CEikMenuPaneItem::SData data;
- data.iCascadeId=0;
- data.iFlags=0;
- HBufC* string = NULL;
-
- if ( callType == EPECallTypeVoIP && iVccHoAllowedToGsm )
- {
- string = StringLoader::LoadLC(
- CPhoneMainResourceResolver::Instance()->
- ResolveResourceID( EPhoneVoIPHandoverToGsmOption ) );
-
- data.iCommandId = EPhoneCmdHandoverToGsm;
-
- }
- else if ( callType == EPECallTypeCSVoice && iVccHoAllowedToWlan )
- {
- string = StringLoader::LoadLC(
- CPhoneMainResourceResolver::Instance()->
- ResolveResourceID( EPhoneVoIPHandoverToWlanOption ) );
-
- data.iCommandId = EPhoneCmdHandoverToWlan;
- }
- else
- {
- // Not add menu item
- return;
- }
-
- data.iText = *string;
- // Try to find index of EPhoneInCallCmdGoToIdle command
- // handover item will be placed above it if found
-
- TInt index( KErrNotFound );
-
- if ( aMenuPane.MenuItemExists( EPhoneInCallCmdGoToIdle, index) )
- {
- aMenuPane.InsertMenuItemL( data, index );
- }
- else
- {
- aMenuPane.AddMenuItemL( data );
- }
-
- CleanupStack::PopAndDestroy( string );
- }
- }
-
-// ---------------------------------------------------------
-// CPhoneVccHandler::StartHandoverNoteTimerL
-// ---------------------------------------------------------
-//
-void CPhoneVccHandler::StartHandoverNoteTimerL()
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::StartHandoverNoteTimerL()");
-
- if( !iHandoverNoteTimer )
- {
- iHandoverNoteTimer = CPhoneTimer::NewL();
- }
-
- iHandoverNoteTimer->After( KPhoneShowNoteTime,
- TCallBack( HandoverNoteTimerCallbackL, this ) );
- }
-
-// ---------------------------------------------------------
-// CPhoneVccHandler::CancelHandoverNoteTimerL
-// ---------------------------------------------------------
-//
-void CPhoneVccHandler::CancelHandoverNoteTimerL()
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::CancelHandoverNoteTimerL()");
- if ( iHandoverNoteTimer )
- {
- delete iHandoverNoteTimer;
- iHandoverNoteTimer = NULL;
- }
- RemoveHandoverNoteL();
- }
-
-// ---------------------------------------------------------
-// CPhoneVccHandler::HandoverNoteTimerCallbackL
-// ---------------------------------------------------------
-//
-TInt CPhoneVccHandler::HandoverNoteTimerCallbackL( TAny* aAny )
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::HandoverNoteTimerCallbackL()");
-
- reinterpret_cast<CPhoneVccHandler*>( aAny )->
- CancelHandoverNoteTimerL();
-
- return KErrNone;
- }
-
-// ---------------------------------------------------------
-// CPhoneVccHandler::RemoveHandoverNoteL
-// ---------------------------------------------------------
-//
-void CPhoneVccHandler::RemoveHandoverNoteL()
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::RemoveHandoverNoteL()");
-
- if ( iVccHoReady && !iHandoverNoteTimer )
- {
- iViewCommandHandle.ExecuteCommandL( EPhoneViewRemoveGlobalNote );
- }
- }
-
-// -----------------------------------------------------------
-// CPhoneVccHandler::HandoverInProgressNoteL
-// -----------------------------------------------------------
-//
-void CPhoneVccHandler::HandoverInProgressNoteL( TInt aCommand )
- {
- TPhoneCmdParamGlobalNote globalNoteParam;
-
-// Check notification tone user setting
- TInt tone = GetHoNotifToneModeL();
-
- if ( tone == 1 )
- {
- globalNoteParam.SetTone( EAvkonSIDConfirmationTone );
- }
- else
- {
- globalNoteParam.SetTone( EAvkonSIDNoSound );
- }
-
- globalNoteParam.SetType( EAknGlobalWaitNote );
- globalNoteParam.SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY );
- globalNoteParam.SetTextResourceId(
- CPhoneMainResourceResolver::Instance()->
- ResolveResourceID( aCommand ) );
-
- iViewCommandHandle.ExecuteCommandL(
- EPhoneViewShowGlobalNote, &globalNoteParam );
-
- StartHandoverNoteTimerL();
- }
-
-// -----------------------------------------------------------------------------
-// CPhoneVccHandler::VccPropertyChangedL
-// Gets called when PS key is changed
-// -----------------------------------------------------------------------------
-//
-void CPhoneVccHandler::VccPropertyChangedL( const TUint aKeyId,
- const TInt aValue )
- {
- __LOGMETHODSTARTEND( PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL() ");
-
- __PHONELOG1( EBasic, EPhoneControl,
- "CPhoneVccHandler::VccPropertyChangedL - key: %d", aValue );
-
-
- if( aKeyId == KVccPropKeyHoStatus )
- {
- switch( aValue )
- {
- case EVccCsToPsHoFailure:
- case EVccPsToCsHoFailure:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- HO fail" );
- // Remove handover note if handover is in progress
- if( !iVccHoReady )
- {
- iVccHoReady = ETrue;
- CPhoneState* phoneState =
- static_cast< CPhoneState* >( iStateMachine.State() );
- CancelHandoverNoteTimerL();
- phoneState->SendGlobalInfoNoteL( EPhoneVoIPHandoverFail );
- }
- }
- break;
- case EVccCsToPsHoSuccessful:
- case EVccPsToCsHoSuccessful:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- HO Success" );
- iVccHoReady = ETrue;
- RemoveHandoverNoteL();
- }
- break;
- case EVccCsToPsHoStarted:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- CsToPsHoStarted" );
- // Do not show if manually started since the wait note is
- // already visible
- if ( iVccHoReady )
- {
- iVccHoReady = EFalse;
- HandoverInProgressNoteL( EPhoneVoIPWaitHandoverFromGsm );
- }
- }
- break;
- case EVccPsToCsHoStarted:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- PsToCsHoStarted" );
- // Do not show if manually started since the wait note is
- // already visible
- if ( iVccHoReady )
- {
- iVccHoReady = EFalse;
- HandoverInProgressNoteL( EPhoneVoIPWaitHandoverFromWlan);
- }
- }
- break;
- case EVccPsToCsHoInprogress:
- case EVccCsToPsHoInprogress:
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- HoInprogress" );
- // Do nothing
- break;
- case EVccHoUnavailable:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- HO Unavailable" );
- iVccUnavailable = ETrue;
- break;
- }
- case EVccHoStateIdle:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- HO IDLE" );
- iVccHoAllowedToGsm = ETrue;
- iVccHoAllowedToWlan = ETrue;
- iNoHoIfMultiCall = EFalse;
- iVccUnavailable = EFalse;
- break;
- }
- case EVccCsToPsNotAllowed:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccCsToPsNotAllowed" );
- iVccHoAllowedToWlan = EFalse;
- iVccHoAllowedToGsm = ETrue;
- iNoHoIfMultiCall = EFalse;
- iVccUnavailable = EFalse;
- break;
- }
-
- case EVccPsToCsNotAllowed:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccPsToCsNotAllowed" );
- iVccHoAllowedToGsm = EFalse;
- iVccHoAllowedToWlan = ETrue;
- iNoHoIfMultiCall = EFalse;
- iVccUnavailable = EFalse;
- break;
- }
-
- case EVccHoStateIdleIfSingleCall:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccHoStateIdleIfSingleCall" );
- iNoHoIfMultiCall = ETrue;
- iVccHoAllowedToGsm = ETrue;
- iVccHoAllowedToWlan = ETrue;
- iVccUnavailable = EFalse;
- break;
- }
- case EVccHoAllowedToCsIfSingleCall:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccHoAllowedToCsIfSingleCall" );
- iNoHoIfMultiCall = ETrue;
- iVccHoAllowedToWlan = EFalse;
- iVccHoAllowedToGsm = ETrue;
- iVccUnavailable = EFalse;
- break;
- }
- case EVccHoAllowedToPsIfSingleCall:
- {
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- EVccHoAllowedToPsIfSingleCall" );
- iNoHoIfMultiCall = ETrue;
- iVccHoAllowedToGsm = EFalse;
- iVccHoAllowedToWlan = ETrue;
- iVccUnavailable = EFalse;
- break;
- }
-
- default:
-
- __PHONELOG( EBasic, PhoneUIVoIPExtension,
- "CPhoneVccHandler::VccPropertyChangedL VccPropertyChangedL -- default" );
- break;
- }
- }
- }
-// ---------------------------------------------------------------------------
-// Gets HO notification tone setting value
-// ---------------------------------------------------------------------------
-//
-TInt CPhoneVccHandler::GetHoNotifToneModeL()
- {
- // Find out VCC service id
- CSPProperty* property = CSPProperty::NewLC();
-
- CSPSettings* settings = CSPSettings::NewLC();
-
- TInt vccServiceId = GetVccServiceIdL();
-
- //get the VCC enabled VoIP service id.
- TInt err = settings->FindPropertyL(
- vccServiceId, ESubPropertyVccDtVoipServiceId, *property );
-
- TInt voipId;
- TInt error = property->GetValue( voipId );
-
- // Find and get the HO notification tone property
- TInt tone = 0;
- RBuf value;
- value.CreateL( 1 );
-
- err = settings->FindPropertyL(
- voipId, ESubPropertyVccHoNotificationToneMode, *property );
-
- if ( !err )
- {
- HBufC* temp;
- property->GetValue( value );
- temp = value.AllocL();
- TLex temp2( *temp );
- temp2.Val( tone );
- delete temp;
- }
- value.Close();
-
- // Set to default (0 = off) in case of invalid value
- if ( !( tone == 0 || tone == 1 ))
- {
- tone = 0;
- }
-
- CleanupStack::PopAndDestroy( settings );
- CleanupStack::PopAndDestroy( property );
-
-
-
- return tone;
- }
-
-// ---------------------------------------------------------------------------
-// For finding out VCC service id.
-// ---------------------------------------------------------------------------
-//
-TInt CPhoneVccHandler::GetVccServiceIdL()
- {
- TInt vccServiceId( KErrNotFound );
- // Array of service provider IDs
- // is defined as: typedef RArray<TServiceId> RIdArray
- // in spdefinitions.h
- RIdArray serviceIdArray;
- CleanupClosePushL( serviceIdArray );
-
- CSPSettings* settings = CSPSettings::NewLC();
- settings->FindServiceIdsL( serviceIdArray );
-
- TBool foundEntry( EFalse );
-
- for ( TInt i( 0 ); i < serviceIdArray.Count() && !foundEntry; i++ )
- {
- CSPProperty* property = CSPProperty::NewLC();
- TInt error = settings->FindPropertyL( serviceIdArray[i], ESubPropertyVccVDI, *property );
-
- if( error == KErrNone )
- {
- vccServiceId = serviceIdArray[i];
- foundEntry = ETrue;
- }
- CleanupStack::PopAndDestroy( property );
- }
- CleanupStack::PopAndDestroy( settings );
- CleanupStack::PopAndDestroy( &serviceIdArray );
-
- return vccServiceId;
- }
-// End of File