diff -r 000000000000 -r 5f000ab63145 phoneapp/phoneuivoipextension/src/cphoneunattendedtransfercmdhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuivoipextension/src/cphoneunattendedtransfercmdhandler.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,317 @@ +/* +* 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 CPhoneUnattendedTransferCmdHandler class. +* +*/ + +#include +#include +#include "cphoneunattendedtransfercmdhandler.h" + +#include "cphonelogger.h" +#include "mphonestatemachine.h" +#include "cphonetransferdialercontroller.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" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::CPhoneUnattendedTransferCmdHandler +// C++ constructor. +// --------------------------------------------------------------------------- +// +CPhoneUnattendedTransferCmdHandler::CPhoneUnattendedTransferCmdHandler( + MPhoneStateMachine& aStateMachine, + MPhoneViewCommandHandle& aViewCommandHandle ) + : iStateMachine( aStateMachine ), iViewCommandHandle( aViewCommandHandle ) + { + + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::ConstructL() + { + iTransferDialerController = CPhoneTransferDialerController::NewL(); + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::NewL +// --------------------------------------------------------------------------- +// +CPhoneUnattendedTransferCmdHandler* CPhoneUnattendedTransferCmdHandler::NewL( + MPhoneStateMachine& aStateMachine, + MPhoneViewCommandHandle& aViewCommandHandle ) + { + CPhoneUnattendedTransferCmdHandler* self = + CPhoneUnattendedTransferCmdHandler::NewLC( + aStateMachine, aViewCommandHandle ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::NewLC +// --------------------------------------------------------------------------- +// +CPhoneUnattendedTransferCmdHandler* CPhoneUnattendedTransferCmdHandler::NewLC( + MPhoneStateMachine& aStateMachine, + MPhoneViewCommandHandle& aViewCommandHandle ) + { + CPhoneUnattendedTransferCmdHandler* self = + new( ELeave ) CPhoneUnattendedTransferCmdHandler( + aStateMachine, aViewCommandHandle ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::~CPhoneUnattendedTransferCmdHandler +// Destructor. +// --------------------------------------------------------------------------- +// +CPhoneUnattendedTransferCmdHandler::~CPhoneUnattendedTransferCmdHandler() + { + delete iTransferDialerController; + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::HandleCommandL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EPhoneInCallCmdUnattendedTransfer: + ShowTransferDialerL(); + break; + + case EPhoneCmdTransferDialerOk: + DoUnattendedTransferL(); + break; + + case EPhoneCmdTransferDialerExit: + CloseTransferDialerL(); + break; + + case EPhoneCmdTransferDialerSearch: + OpenSingleItemContactFetchL( + EPhoneCmdTransferDialerContactFetch ); + break; + + case EPhoneCmdTransferDialerContactFetch: + { + TBuf fetchContent; + fetchContent = iViewCommandHandle.FetchContent(); + + // Set transfer to address to the phoneengine + iStateMachine.PhoneEngineInfo()-> + SetTransferTargetCommand( fetchContent ); + iStateMachine.SendPhoneEngineMessage( + MPEPhoneModel::EPEMessageDoUnattendedTransfer ); + + ShowWaitingAcceptanceNoteL(); + } + break; + + default: + __PHONELOG( EOnlyFatal, PhoneUIVoIPExtension, + "CPhoneUnattendedTransferCmdHandler::HandleCommandL, DEFAULT" ); + ASSERT( EFalse ); + } + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::ShowTransferDialerL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::ShowTransferDialerL() + { + __LOGMETHODSTARTEND( PhoneUIVoIPExtension, + "CPhoneUnattendedTransferCmdHandler::ShowTransferDialerL" ) + + CPhoneState* phoneState = static_cast( iStateMachine.State() ); + if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) ) + { + TPhoneCmdParamCustomDialer customDialerParam; + customDialerParam.SetDialerController( iTransferDialerController ); + + // Set dialer to transfer mode. + iViewCommandHandle.ExecuteCommandL( + EPhoneViewShowCustomizedDialer, + &customDialerParam ); + + // Open transfer dialer + phoneState->BeginTransEffectLC( ENumberEntryCreate ); + iViewCommandHandle.ExecuteCommandL( EPhoneViewCreateNumberEntry ); + phoneState->EndTransEffect(); + + // Update CBA to transfer dialer CBA + TPhoneCmdParamInteger resourceId; + resourceId.SetInteger( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( iTransferDialerController->CbaResourceId() ) ); + iViewCommandHandle.ExecuteCommandL( EPhoneViewUpdateCba, + &resourceId ); + } + else + { + HBufC *text = HBufC::NewLC( KPhoneNumberEntryBufferSize ); + TPtr ptr( text->Des() ); + // Pre-populate the query with the number entry contents, if it exists + if ( phoneState->IsNumberEntryUsedL() ) + { + // get the number entry contents + TPhoneCmdParamString stringParam; + stringParam.SetString( &ptr ); + iViewCommandHandle.ExecuteCommandL( + EPhoneViewGetLocalizedNumberFromEntry, + &stringParam ); + } + + TPhoneCmdParamQuery queryDialogParam; + queryDialogParam.SetQueryType( EPhoneGenericTextQuery ); + queryDialogParam.SetQueryResourceId( + CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneVoIPTransferAddressQuery ) ); + + queryDialogParam.SetDefaultCba( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneVoIPTransferAddressQueryEmptySoftkeys ) ); + + queryDialogParam.SetContentCba( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneVoIPTransferAddressQueryNotEmptySoftkeys ) ); + + queryDialogParam.SetDataText( &ptr ); + queryDialogParam.SetSendKeyEnabled( ETrue ); + + // Display dialog + iViewCommandHandle.ExecuteCommandL( + EPhoneViewShowQuery, &queryDialogParam ); + + CleanupStack::PopAndDestroy( text ); + } + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::DoUnattendedTransferL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::DoUnattendedTransferL() + { + __LOGMETHODSTARTEND( PhoneUIVoIPExtension, + "CPhoneUnattendedTransferCmdHandler::DoUnattendedTransferL" ) + + // First get the transfer to address from dialog + TPhoneCmdParamString transferTarget; + HBufC* content = HBufC::NewLC( KPEPhoneNumberMaxLength ); + TPtr ptr( content->Des() ); + transferTarget.SetString( &ptr ); + CPhoneState* phoneState = + static_cast< CPhoneState* >( iStateMachine.State() ); + if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) && + phoneState->IsCustomizedDialerVisibleL() ) + { + iViewCommandHandle.ExecuteCommand( + EPhoneViewGetNumberFromEntry, + &transferTarget ); + + phoneState->CloseCustomizedDialerL(); + } + else + { + iViewCommandHandle.ExecuteCommandL( + EPhoneViewGetTextQueryContent, &transferTarget ); + } + + // Set transfer to address to the phoneengine + iStateMachine.PhoneEngineInfo()->SetTransferTargetCommand( ptr ); + iStateMachine.SendPhoneEngineMessage( + MPEPhoneModel::EPEMessageDoUnattendedTransfer ); + + ShowWaitingAcceptanceNoteL(); + CleanupStack::PopAndDestroy( content ); + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::CloseTransferDialerL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::CloseTransferDialerL() + { + __LOGMETHODSTARTEND( PhoneUIVoIPExtension, + "CPhoneUnattendedTransferCmdHandler::CloseTransferDialerL" ) + + CPhoneState* phoneState = + static_cast< CPhoneState* >( iStateMachine.State() ); + phoneState->CloseCustomizedDialerL(); + } + + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::OpenSingleItemContactFetchL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::OpenSingleItemContactFetchL( + TInt aFetchType ) + { + __LOGMETHODSTARTEND( PhoneUIVoIPExtension, + "CPhoneUnattendedTransferCmdHandler::OpenSingleItemContactFetchL" ) + + TPhoneCmdParamInteger integerParam; + integerParam.SetInteger( aFetchType ); + + iViewCommandHandle.HandleCommandL( + EPhoneViewOpenSingleItemFetchDialog, + &integerParam ); + } + +// --------------------------------------------------------------------------- +// CPhoneUnattendedTransferCmdHandler::ShowWaitingAcceptanceNoteL +// --------------------------------------------------------------------------- +// +void CPhoneUnattendedTransferCmdHandler::ShowWaitingAcceptanceNoteL() + { + __LOGMETHODSTARTEND( PhoneUIVoIPExtension, + "CPhoneUnattendedTransferCmdHandler::ShowWaitingAcceptanceNoteL" ) + // Show "Waiting acceptance..." note + TPhoneCmdParamGlobalNote globalNoteParam; + globalNoteParam.SetType( EAknGlobalWaitNote ); + globalNoteParam.SetTone( EAvkonSIDNoSound ); + globalNoteParam.SetSoftkeys( R_AVKON_SOFTKEYS_EMPTY ); + globalNoteParam.SetTextResourceId( CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneVoIPWaitingAcceptanceNote ) ); + iViewCommandHandle.ExecuteCommandL( + EPhoneViewShowGlobalNote, &globalNoteParam ); + }