phoneapp/phoneuivoipextension/src/cphonecallforwardqueryhandler.cpp
changeset 37 ba76fc04e6c2
child 51 f39ed5e045e0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuivoipextension/src/cphonecallforwardqueryhandler.cpp	Fri Jun 04 10:19:18 2010 +0100
@@ -0,0 +1,370 @@
+/*
+* Copyright (c) 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 CPhoneCallForwardQueryHandler class.
+*
+*/
+
+#include <featmgr.h>
+#include <StringLoader.h>
+#include <mpeengineinfo.h>
+
+#include "cphonecallforwardqueryhandler.h"
+#include "cphonelogger.h"
+#include "mphonestatemachine.h"
+#include "phonerssvoip.h"
+#include "phoneappvoipcommands.hrh"
+#include "cphonestate.h"
+#include "cphonestateincall.h"
+#include "tphonecmdparamcustomdialer.h"
+#include "tphonecmdparaminteger.h"
+#include "tphonecmdparamstring.h"
+#include "tphonecmdparamquery.h"
+#include "tphonecmdparamglobalnote.h"
+#include "cphonemainresourceresolver.h"
+#include "cphonestatemachinevoip.h"
+#include "tphonecmdparamstring.h"
+#include "phoneviewcommanddefinitions.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::CPhoneCallForwardQueryHandler
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CPhoneCallForwardQueryHandler::CPhoneCallForwardQueryHandler( 
+        MPhoneStateMachine& aStateMachine,
+        MPhoneViewCommandHandle& aViewCommandHandle )
+    : iStateMachine( aStateMachine ), 
+      iViewCommandHandle( aViewCommandHandle ),
+      iMultipleChoicesArray( NULL )
+    {
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ConstructL()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::NewL
+// ---------------------------------------------------------------------------
+//
+CPhoneCallForwardQueryHandler* CPhoneCallForwardQueryHandler::NewL(
+        MPhoneStateMachine& aStateMachine,
+        MPhoneViewCommandHandle& aViewCommandHandle )
+    {
+    CPhoneCallForwardQueryHandler* self = 
+        CPhoneCallForwardQueryHandler::NewLC( 
+            aStateMachine, aViewCommandHandle );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::NewLC
+// ---------------------------------------------------------------------------
+//
+CPhoneCallForwardQueryHandler* CPhoneCallForwardQueryHandler::NewLC(
+        MPhoneStateMachine& aStateMachine,
+        MPhoneViewCommandHandle& aViewCommandHandle )
+    {
+    CPhoneCallForwardQueryHandler* self = 
+        new( ELeave ) CPhoneCallForwardQueryHandler( 
+            aStateMachine, aViewCommandHandle );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::~CPhoneCallForwardQueryHandler
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CPhoneCallForwardQueryHandler::~CPhoneCallForwardQueryHandler()
+    {
+    delete iMultipleChoicesArray;
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ShowMovedPermanentlyQueryL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ShowMovedPermanentlyQueryL(
+        TInt aCallId )
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+        "CPhoneCallForwardQueryHandler::ShowMovedPermanentlyQueryL" )
+        
+    iCallId = aCallId;
+    iAddressArray = iStateMachine.PhoneEngineInfo()->
+        ForwardAddressChoices( aCallId );
+    
+    if ( NULL == iAddressArray )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    
+    iQueryType = EPhoneMovedPermanently;
+    TPhoneCmdParamQuery queryParam;
+    queryParam.SetQueryCommandObserver( *this );
+    queryParam.SetTone( EAvkonSIDInformationTone );
+    queryParam.SetQueryType( EPhoneGlobalQueryDialog );
+  
+    HBufC* queryPrompt = StringLoader::LoadLC( 
+            CPhoneMainResourceResolver::Instance()->ResolveResourceID( 
+                    EPhoneVoIPMovedPermanentlyQueryHeader ));
+   
+    queryParam.SetQueryPrompt( *queryPrompt );
+
+    queryParam.SetDefaultCba(             
+        CPhoneMainResourceResolver::Instance()->
+            ResolveResourceID( EPhoneVoIPMovedPermanentlySoftkeys ) );
+  
+    iCommandProcessed = EFalse;
+    
+    iViewCommandHandle.ExecuteCommandL( EPhoneViewShowQuery, &queryParam );
+    
+    CleanupStack::PopAndDestroy( queryPrompt );
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ShowMultipleChoicesQueryL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ShowMultipleChoicesQueryL(
+        TInt aCallId )
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+        "CPhoneCallForwardQueryHandler::ShowMultipleChoicesQueryL" )
+        
+    iCallId = aCallId;
+    iAddressArray = iStateMachine.PhoneEngineInfo()->
+        ForwardAddressChoices( aCallId );
+    
+    if ( NULL == iAddressArray )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    
+    ResetMultipleChoicesArrayL( *iAddressArray );
+    
+    iQueryType = EPhoneMultipleChoices;
+    TPhoneCmdParamQuery queryParam;
+    queryParam.SetQueryCommandObserver( *this );
+    queryParam.SetTone( EAvkonSIDInformationTone );
+    queryParam.SetQueryType( EPhoneCustomListQueryDialog );
+    queryParam.SetItemTextArrayForListQuery( 
+            static_cast<MDesCArray&> ( *iMultipleChoicesArray ) );
+
+    queryParam.SetQueryResourceId( 
+            CPhoneMainResourceResolver::Instance()->ResolveResourceID( 
+                    EPhoneVoIPMultipleChoicesListQuery ) );
+
+    iCommandProcessed = EFalse;
+    
+    iViewCommandHandle.ExecuteCommandL( EPhoneViewShowQuery, &queryParam );
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::AddToContacsL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::AddToContacsL(
+        TBool aCreateNew )
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+        "CPhoneCallForwardQueryHandler::AddToContacsL" )
+    
+    if ( !iAddressArray ||
+          0 == iAddressArray->Count() )
+        {
+        User::Leave( KErrNotFound );
+        }
+        
+    HBufC* buf = HBufC::NewLC( iAddressArray->MdcaPoint(0).Length() );
+    buf->Des().Copy( iAddressArray->MdcaPoint(0) );
+    TPtr ptr( buf->Des() );
+
+    iCommandProcessed = EFalse;
+    
+    TPhoneCmdParamString stringParam;
+    stringParam.SetString( &ptr );
+    iViewCommandHandle.ExecuteCommandL(
+        aCreateNew ? EPhoneViewAddContactByString :
+                     EPhoneViewUpdateContactByString,
+        &stringParam );   
+    
+    CleanupStack::PopAndDestroy( buf );
+    
+    // Forward call to array index 0
+    ForwardCallToAddressL( 0 );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::SaveAddressToContactsL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::SaveAddressToContactsL()
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+       "CPhoneCallForwardQueryHandler::SaveAddressToContactsL" )
+    
+    TPhoneCmdParamQuery queryDialogParam;
+    iQueryType = EPhoneQueryAddToContacts;
+    queryDialogParam.SetQueryCommandObserver( *this );
+    queryDialogParam.SetQueryType( EPhoneContactsListQuery );
+    queryDialogParam.SetQueryResourceId(
+           CPhoneMainResourceResolver::Instance()->
+               ResolveResourceID( EPhoneAddtoContactsListQuery )  );
+    
+    iCommandProcessed = EFalse;
+    
+    // Display dialog        
+    iViewCommandHandle.ExecuteCommandL( EPhoneViewShowQuery,
+       &queryDialogParam );
+       
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ProcessCommandL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ProcessCommandL(
+        TInt aCommandId )
+    {
+    __LOGMETHODSTARTEND( PhoneUIVoIPExtension, 
+       "CPhoneCallForwardQueryHandler::ProcessCommandL" )
+    
+    if ( iCommandProcessed )
+        {
+        return;
+        }
+    
+    iCommandProcessed = ETrue;
+    
+    if ( iQueryType == EPhoneQueryAddToContacts )
+        {
+        switch ( aCommandId )
+            {          
+            case EPhoneNumberAcqCmdSave:
+                AddToContacsL( ETrue );     
+                break;
+                
+            case EPhoneNumberAcqCmdAddToName:
+                AddToContacsL( EFalse );     
+                break;
+            case EAknSoftkeyCancel:
+                iStateMachine.SendPhoneEngineMessage( 
+                        MPEPhoneModel::EPEMessageRelease );     
+                break;
+            }
+        }
+    else if ( iQueryType == EPhoneMovedPermanently )
+        {
+        switch ( aCommandId )
+            {          
+            case EAknSoftkeyOk:
+                SaveAddressToContactsL();     
+                break;
+                
+            default:
+                iStateMachine.SendPhoneEngineMessage( 
+                        MPEPhoneModel::EPEMessageRelease );  
+                break;
+            }
+        }
+    else if ( iQueryType == EPhoneMultipleChoices )
+        {
+        if ( iAddressArray && aCommandId >= 0 && 
+             aCommandId < iAddressArray->MdcaCount() )
+            {
+            ForwardCallToAddressL( aCommandId );
+            }
+        else
+            {
+            iStateMachine.SendPhoneEngineMessage( 
+                    MPEPhoneModel::EPEMessageRelease );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ShowCallForwardedNoteL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ShowCallForwardedNoteL()
+    {
+    __LOGMETHODSTARTEND(PhoneUIVoIPExtension, 
+            "CPhoneCallForwardQueryHandler::ShowCallForwardedNoteL( ) ");
+   
+    CPhoneState* phoneState = 
+        static_cast< CPhoneState* >( iStateMachine.State() );       
+            
+    phoneState->SendGlobalInfoNoteL( EPhoneRemoteForwarding );
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ResetMultipleChoicesArrayL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ResetMultipleChoicesArrayL(
+        const MDesC8Array& aAddressArray )
+    {
+    __LOGMETHODSTARTEND(PhoneUIVoIPExtension, 
+            "CPhoneCallForwardQueryHandler::ResetMultipleChoicesArrayL( ) ");
+   
+    delete iMultipleChoicesArray;
+    iMultipleChoicesArray = NULL;
+    
+    iMultipleChoicesArray = 
+        new(ELeave) CDesC16ArrayFlat( aAddressArray.MdcaCount() );
+    
+    for ( TInt i=0; i< aAddressArray.MdcaCount() ; i++ )
+        {
+        HBufC* buf = HBufC::NewLC( aAddressArray.MdcaPoint(i).Length() );
+        buf->Des().Copy( aAddressArray.MdcaPoint(i) );
+        iMultipleChoicesArray->AppendL( *buf );
+        CleanupStack::PopAndDestroy( buf );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CPhoneCallForwardQueryHandler::ForwardCallToAddressL
+// ---------------------------------------------------------------------------
+//
+void CPhoneCallForwardQueryHandler::ForwardCallToAddressL(
+        TInt aIndex )
+    {
+    __LOGMETHODSTARTEND(PhoneUIVoIPExtension, 
+            "CPhoneCallForwardQueryHandler::ForwardCallToAddressL( ) ");
+   
+    ShowCallForwardedNoteL();
+    iStateMachine.PhoneEngineInfo()->SetForwardAddressIndex( aIndex );
+    iStateMachine.SendPhoneEngineMessage( 
+            MPEPhoneModel::EPEMessageForwardCallToAddress );
+    }
+
+// End of File