phoneapp/phoneuicontrol/src/cphonecallheadermanager.cpp
changeset 37 ba76fc04e6c2
child 45 6b911d05207e
--- /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 <mpeengineinfo.h>
+#include <StringLoader.h>
+#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<KPhoneCallHeaderLabelMaxLength> labelText( KNullDesC );
+        LoadResource( labelText, aLabelId );
+        aCallHeaderData->SetLabelText( labelText );
+
+        if ( aShortLabelId != EPhoneStringList )
+            {
+            TBuf<KPhoneCallHeaderLabelMaxLength> 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;
+    }
+