diff -r 2eacb6118286 -r ba76fc04e6c2 phoneapp/phoneuivoipextension/src/cphonecallforwardqueryhandler.cpp --- /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 +#include +#include + +#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 ( *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