diff -r 2eacb6118286 -r ba76fc04e6c2 phoneapp/phoneuicontrol/src/cphonecallheadermanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuicontrol/src/cphonecallheadermanager.cpp Fri Jun 04 10:19:18 2010 +0100 @@ -0,0 +1,375 @@ +/* +* 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: Bubble manager wrapper. +* +*/ + +#include +#include +#include "cphonecallheadermanager.h" +#include "tphonecallheaderparam.h" +#include "tphonecmdparamboolean.h" +#include "tphonecmdparaminteger.h" +#include "tphonecmdparamcallheaderdata.h" +#include "cphonemainresourceresolver.h" +#include "phonerssbase.h" +#include "phoneui.pan" +#include "phoneviewcommanddefinitions.h" +#include "phonelogger.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::CPhoneCallHeaderManager +// --------------------------------------------------------------------------- +// +CPhoneCallHeaderManager::CPhoneCallHeaderManager( + MPhoneViewCommandHandle& aViewCommandHandle, + MPhoneStateMachine& aStateMachine, + MPhoneCustomization* aCustomization ) + : iViewCommandHandle ( aViewCommandHandle ), + iStateMachine ( aStateMachine ), + iCustomization ( aCustomization ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::CPhoneCallHeaderManager() "); + } + + // --------------------------------------------------------------------------- + // CPhoneCallHeaderManager::NewL + // --------------------------------------------------------------------------- + // +CPhoneCallHeaderManager* CPhoneCallHeaderManager::NewL( + MPhoneViewCommandHandle& aViewCommandHandle, + MPhoneStateMachine& aStateMachine, + MPhoneCustomization* aCustomization ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::NewL() "); + CPhoneCallHeaderManager* self = new (ELeave) CPhoneCallHeaderManager( + aViewCommandHandle, + aStateMachine, + aCustomization ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::ConstructL +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::ConstructL() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::ConstructL() "); + if ( !iCallHeaderParam ) + { + iCallHeaderParam = new (ELeave) TPhoneCallHeaderParam ( *this, iStateMachine ); + } + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::~CPhoneCallHeaderManager +// --------------------------------------------------------------------------- +// +CPhoneCallHeaderManager::~CPhoneCallHeaderManager() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::~CPhoneCallHeaderManager() "); + delete iCallHeaderParam; + } + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::LoadResource +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::LoadResource( TDes& aData, const TInt aResource ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::LoadResource() "); + __PHONELOG1( EBasic, EPhoneControl, "CPhoneCallHeaderManager::LoadResource - aResource: %d", aResource ); + StringLoader::Load( + aData, CPhoneMainResourceResolver::Instance()->ResolveResourceID( aResource ), + CCoeEnv::Static() ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::UpdateCallHeaderInfoL +// --------------------------------------------------------------------------- +// +TPhoneCmdParamCallHeaderData CPhoneCallHeaderManager::UpdateCallHeaderInfoL( + const TInt aCallId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::UpdateCallHeaderInfoL() "); + __ASSERT_DEBUG( iStateMachine.PhoneEngineInfo(), Panic( EPhoneCtrlInvariant ) ); + TPhoneCmdParamCallHeaderData callHeaderParam; + iCallHeaderParam->UpdateCallHeaderInfoL( + aCallId, + IsWaitingCallL( aCallId ), + IsVideoCall( aCallId ), + &callHeaderParam ); + + callHeaderParam.SetCiphering( + iStateMachine.PhoneEngineInfo()->IsSecureCall( aCallId ) ); + + callHeaderParam.SetCipheringIndicatorAllowed( + iStateMachine.PhoneEngineInfo()->SecureSpecified() ); + + return callHeaderParam; + } + +// --------------------------------------------------------------------------- +// TPhoneCallHeaderParam::GetRemoteInfoDataL +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::GetRemoteInfoDataL( + const TInt aCallId, + TDes& aData ) const + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::GetRemoteInfoDataL() "); + iCallHeaderParam->GetRemoteInfoDataL( aCallId, aData); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::SetCallHeaderTextsForCallComingIn +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::SetCallHeaderTextsForCallComingIn( + const TInt aCallId, + const TBool aWaitingCall, + TPhoneCmdParamCallHeaderData* aCallHeaderData ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCallHeaderManager::SetCallHeaderTextsForCallComingIn() "); + __ASSERT_DEBUG( iStateMachine.PhoneEngineInfo(), Panic( EPhoneCtrlInvariant ) ); + + iCallHeaderParam->SetCallHeaderTexts( + aCallId, + aWaitingCall, + IsVideoCall( aCallId ), + aCallHeaderData ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::DisplayHeaderForCallComingInL +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::DisplayHeaderForCallComingInL( + const TInt aCallId, + const TBool aWaitingCall ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCallHeaderManager::DisplayHeaderForCallComingInL() "); + __ASSERT_DEBUG( iStateMachine.PhoneEngineInfo(), Panic( EPhoneCtrlInvariant ) ); + TPhoneCmdParamCallHeaderData callHeaderParam; + + iCallHeaderParam->SetIncomingCallHeaderParamsL( + aCallId, + aWaitingCall, + IsVideoCall( aCallId ), + &callHeaderParam ); + + if( iCustomization ) + { + // to do modifications to call header parameters + // if VoIP call in question + iCustomization->ModifyCallHeaderTexts( aCallId, &callHeaderParam, + KNullDesC ); + } + + // Display call header + iViewCommandHandle.ExecuteCommandL( + EPhoneViewCreateCallHeader, + aCallId, + &callHeaderParam ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::DisplayHeaderForOutgoingCallL +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::DisplayHeaderForOutgoingCallL( const TInt aCallId ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::DisplayHeaderForOutgoingCallL() "); + __ASSERT_DEBUG( iStateMachine.PhoneEngineInfo(), Panic( EPhoneCtrlInvariant ) ); + TPhoneCmdParamCallHeaderData callHeaderParam; + + iCallHeaderParam->SetOutgoingCallHeaderParamsL( + aCallId, + &callHeaderParam ); + + if( iCustomization ) + { + // to do modifications to call header parameters + // if VoIP call in question + iCustomization->ModifyCallHeaderTexts( aCallId, &callHeaderParam, + KNullDesC ); + } + + // Display call header for outgoing call + iViewCommandHandle.ExecuteCommandL( + EPhoneViewCreateCallHeader, + aCallId, + &callHeaderParam ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::IsWaitingCallL +// --------------------------------------------------------------------------- +// +TBool CPhoneCallHeaderManager::IsWaitingCallL( const TInt aCallId ) const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCallHeaderManager::IsWaitingCallL() "); + TBool waiting( EFalse ); + if ( iStateMachine.PhoneEngineInfo()->CallState( aCallId ) == EPEStateRinging ) + { + TPhoneCmdParamInteger activeCallCount; + iViewCommandHandle.ExecuteCommandL( + EPhoneViewGetCountOfActiveCalls, + &activeCallCount ); + // if there is other calls then ringing call is waiting call. + if( activeCallCount.Integer() > 0 ) + { + waiting = ETrue; + } + } + __PHONELOG1( EBasic, EPhoneControl, "CPhoneCallHeaderManager::IsWaitingCallL - waiting: %d", waiting ); + return waiting; + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::IsVideoCall +// --------------------------------------------------------------------------- +// +TBool CPhoneCallHeaderManager::IsVideoCall( const TInt aCallId ) const + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::IsVideoCall() "); + if( aCallId < 0 ) + { + // Illegal call id, check call type command + return ( iStateMachine.PhoneEngineInfo()->CallTypeCommand() + == EPECallTypeVideo ); + } + return ( iStateMachine.PhoneEngineInfo()->CallType( aCallId ) + == EPECallTypeVideo ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::SetCallHeaderType +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::SetCallHeaderType( + TInt aCallHeaderType ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::SetCallHeaderType() "); + iCallHeaderParam->SetCallHeaderType( aCallHeaderType ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::~CPhoneCallHeaderManager +// --------------------------------------------------------------------------- +// +TInt CPhoneCallHeaderManager::CallHeaderType() const + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::CallHeaderType() "); + return iCallHeaderParam->CallHeaderType(); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::SetDivertIndication +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::SetDivertIndication( const TBool aDivertIndication ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneCallHeaderManager::SetDivertIndication()"); + iCallHeaderParam->SetDivertIndication( aDivertIndication ); + } + +// --------------------------------------------------------------------------- +// CPhoneCallHeaderManager::SetPhoneNumberAvailabilityL +// --------------------------------------------------------------------------- +// +void CPhoneCallHeaderManager::SetPhoneNumberAvailabilityL( + const TInt aNumberLength, + const TBool aContactInfoAvailable ) + { + __LOGMETHODSTARTEND( + EPhoneControl, + "CPhoneCallHeaderManager::SetPhoneNumberAvailabilityL() "); + TPhoneCmdParamBoolean phoneNumberAvailable; + if( aNumberLength || aContactInfoAvailable ) + { + // Phone number is available straight or via contact info + // so switch to video/voice call is possible + __PHONELOG( EBasic, + EPhoneControl, + "CPhoneCallHeaderManager::SetPhoneNumberAvailabilityL - Phonenumber is available" ); + phoneNumberAvailable.SetBoolean( ETrue ); + } + else + { + __PHONELOG( EBasic, + EPhoneControl, + "CPhoneCallHeaderManager::SetPhoneNumberAvailabilityL - Phonenumber is not available" ); + phoneNumberAvailable.SetBoolean( EFalse ); + } + iViewCommandHandle.ExecuteCommandL( + EPhoneViewSetPhoneNumberAvailableInPhoneEngine, + &phoneNumberAvailable ); + } + +// ----------------------------------------------------------- +// CPhoneCallHeaderManager::LoadCallHeaderTexts +// ----------------------------------------------------------- +// +void CPhoneCallHeaderManager::LoadCallHeaderTexts( + const TInt aLabelId, + const TInt aShortLabelId, + TPhoneCmdParamCallHeaderData* aCallHeaderData ) + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCallHeaderManager::LoadCallHeaderTexts( ) "); + if ( aLabelId != EPhoneStringList ) + { + TBuf labelText( KNullDesC ); + LoadResource( labelText, aLabelId ); + aCallHeaderData->SetLabelText( labelText ); + + if ( aShortLabelId != EPhoneStringList ) + { + TBuf shortLabelText( KNullDesC ); + LoadResource( shortLabelText, aShortLabelId ); + aCallHeaderData->SetShortLabelText( shortLabelText ); + } + } + } + +// ----------------------------------------------------------- +// CPhoneCallHeaderManager::GetInCallNumberTextL +// ----------------------------------------------------------- +// +void CPhoneCallHeaderManager::GetInCallNumberTextL( + TInt aCallId, + TDes& aData ) const + { + __LOGMETHODSTARTEND(EPhoneControl, "CPhoneCallHeaderManager::GetInCallNumberTextL( ) "); + // Display "Call n", n = callId-8 for video and callId+1 for voice call + HBufC* tmp = StringLoader::LoadL( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInCallNumberText ), + aCallId + ( IsVideoCall( aCallId ) ? -8 : 1 ), + CCoeEnv::Static() ); + + aData = *tmp; + delete tmp; + } +