--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/vcommandmanager/src/vcmanagercontactselecthandler_aiw.cpp Thu Dec 17 08:46:30 2009 +0200
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2006-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:
+*
+*/
+
+
+// INCLUDE FILES
+#include "vcmanagercontactselecthandler_aiw.h"
+#include "vcmanagerdialer_aiw.h"
+
+#include <CPbkFieldInfo.h>
+
+#include <vascvpbkhandler.h>
+
+#include <cntdef.h>
+#include <eikenv.h>
+
+#include <featmgr.h> // FeatureManager.
+
+#ifdef __SIND_EXTENSIONS
+#include <sendui.h>
+#include <SendUiConsts.h>
+#include <CMessageData.h>
+#endif // __SIND_EXTENSIONS
+
+#include "rubydebug.h"
+
+#ifdef __WINS__
+// Text to show in emulator when dialing
+_LIT( KDialingNoteWins, "Dialing" );
+#endif
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::CVcManagerContactSelectHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CVcManagerContactSelectHandler::CVcManagerContactSelectHandler()
+ : iVideoTelephonySupported( EFalse ), iVoIPFeatureSupported( EFalse )
+ {
+ // Nothing
+ }
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CVcManagerContactSelectHandler* CVcManagerContactSelectHandler::NewL(
+ MNssContextMgr* aContextManager,
+ MNssTagSelectNotification* aTagSelectNotification )
+ {
+ CVcManagerContactSelectHandler* self = new (ELeave) CVcManagerContactSelectHandler;
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aContextManager, aTagSelectNotification );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::~CVcManagerContactSelectHandler
+// Destructor
+// ---------------------------------------------------------
+//
+CVcManagerContactSelectHandler::~CVcManagerContactSelectHandler()
+ {
+ RUBY_DEBUG0( "CVcManagerContactSelectHandler::~CVcManagerContactSelectHandler" );
+
+ delete iPbkHandler;
+
+ if ( iTagSelectNotification )
+ {
+ iTagSelectNotification->Deregister( iContext, this );
+ }
+
+ delete iContext;
+
+#ifdef __SIND_EXTENSIONS
+ delete iSendUi;
+#endif // __SIND_EXTENSIONS
+
+ delete iGlobalDialer;
+ }
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::HandleTagSelect
+// EPOC default constructor can leave.
+// ---------------------------------------------------------
+//
+void CVcManagerContactSelectHandler::ConstructL( MNssContextMgr* aContextManager,
+ MNssTagSelectNotification* aTagSelectNotification )
+ {
+ RUBY_DEBUG_BLOCK( "CVcManagerContactSelectHandler::ConstructL" );
+
+ iTagSelectNotification = aTagSelectNotification;
+
+ iContext = aContextManager->CreateContextL();
+ iContext->SetNameL( KNssGCHNameDialContext );
+ iContext->SetGlobal( ETrue );
+ iTagSelectNotification->RegisterL( iContext, this );
+
+ RUBY_DEBUG0( "CVcManagerContactSelectHandler::ConstructL creating instance of CVasVPbkHandler" );
+ iPbkHandler = CVasVPbkHandler::NewL();
+ iPbkHandler->InitializeL();
+
+ FeatureManager::InitializeLibL();
+ iVideoTelephonySupported = FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony );
+
+ iVoIPFeatureSupported = FeatureManager::FeatureSupported( KFeatureIdCommonVoip );
+
+ // Frees the TLS. Must be done after FeatureManager is used.
+ FeatureManager::UnInitializeLib();
+
+ // Take Eikon environment
+ iEikonEnvironment = CEikonEnv::Static();
+ }
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::HandleTagSelect
+// Dials number
+// ---------------------------------------------------------
+//
+void CVcManagerContactSelectHandler::HandleTagSelect( MNssTag* aTag )
+ {
+ RUBY_DEBUG2( "CVcManagerContactSelectHandler::HandleTagSelect VOIP %i video %i", iVoIPFeatureSupported, iVideoTelephonySupported );
+
+ TRAP_IGNORE( DoHandleTagSelectL( aTag ) );
+ }
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::DoHandleTagSelect
+// Dials number or create message
+// ---------------------------------------------------------
+//
+void CVcManagerContactSelectHandler::DoHandleTagSelectL( MNssTag* aTag )
+ {
+ RUBY_DEBUG_BLOCK( "CVcManagerContactSelectHandler::DoHandleTagSelectL" );
+
+ CleanupDeletePushL( aTag );
+
+ HBufC* name = aTag->SpeechItem()->PartialTextL( KNameTrainingIndex );
+ CleanupStack::PushL( name );
+
+ iContactId = aTag->RRD()->IntArray()->At( KVasContactIdRrdLocation );
+
+ iPbkHandler->FindContactFieldL( aTag );
+
+ TVasExtensionAction action =
+ (TVasExtensionAction)aTag->RRD()->IntArray()->At( KVasExtensionRrdLocation );
+ TVasExtensionCommand command =
+ (TVasExtensionCommand)aTag->RRD()->IntArray()->At( KVasExtensionCommandRrdLocation );
+
+ if ( action == EDial )
+ {
+ DialL( *name, iPbkHandler->TextL(), iPbkHandler->FieldTypeL(), command );
+ }
+#ifdef __SIND_EXTENSIONS
+ else
+ {
+ CMessageData* messageData = CMessageData::NewL();
+ CleanupStack::PushL( messageData );
+
+ // created when needed first time
+ if ( !iSendUi )
+ {
+ iSendUi = CSendUi::NewL();
+ }
+
+ TUid sendUid( KSenduiMtmSmsUid );
+ switch ( action )
+ {
+ case ENewMessage:
+ // @todo Check that KSenduiMtmUniMessageUid is ok to use
+ // instead of SenduiMtmMmsUid or KSenduiMtmSmsUid
+ sendUid = KSenduiMtmUniMessageUid;
+ messageData->AppendToAddressL( iPbkHandler->TextL(), *name );
+ break;
+
+ case ENewEmail:
+ sendUid = KSenduiMtmSmtpUid;
+ messageData->AppendToAddressL( iPbkHandler->TextL(), *name );
+ break;
+
+ default:
+ RUBY_ERROR0( "CVcManagerContactSelectHandler::DoHandleTagSelectL wrong action id" );
+ }
+
+ RUBY_DEBUG1( "CVcManagerContactSelectHandler::DoHandleTagSelectL action %i",
+ action );
+ // launch editor as a stand-alone application so that
+ // it can/will be restored if put to background
+ iSendUi->CreateAndSendMessageL( sendUid, messageData, KNullUid, EFalse );
+
+ CleanupStack::PopAndDestroy( messageData );
+ }
+#endif // __SIND_EXTENSIONS
+
+ CleanupStack::PopAndDestroy( name );
+ CleanupStack::Pop( aTag );
+ }
+
+
+// ---------------------------------------------------------
+// CVcManagerContactSelectHandler::DialL
+// Dials contact
+// ---------------------------------------------------------
+//
+#ifndef __WINS__
+void CVcManagerContactSelectHandler::DialL( const TDesC& aName,
+ const TDesC& aPhoneNumber,
+ TFieldType aFieldType,
+ TVasExtensionCommand aCommandId )
+#else
+void CVcManagerContactSelectHandler::DialL( const TDesC& /*aName*/,
+ const TDesC& aPhoneNumber,
+ TFieldType aFieldType,
+ TVasExtensionCommand aCommandId )
+#endif // __WINS__
+ {
+ RUBY_DEBUG2( "CVcManagerContactSelectHandler::DialL fieldtype %i commandId %i", aFieldType, aCommandId );
+
+ // select call type
+ TCallType callType( EVoice );
+
+ if ( ( aCommandId == EVoipCommand || ( aCommandId == EDefaultCommand &&
+ aFieldType == KUidContactFieldVCardMapVOIP ) ) && iVoIPFeatureSupported )
+ {
+ RUBY_DEBUG0( "CVcManagerContactSelectHandler::SetupDialData VOIP" );
+
+ callType = EVoIP;
+ }
+
+ if ( ( aCommandId == EVideoCommand || ( aCommandId == EDefaultCommand &&
+ aFieldType == KUidContactFieldVCardMapVIDEO ) ) && iVideoTelephonySupported )
+ {
+ RUBY_DEBUG0( "CVcManagerContactSelectHandler::SetupDialData video" );
+
+ callType = EVideo;
+ }
+
+#ifndef __WINS__
+ if ( !iGlobalDialer )
+ {
+ iGlobalDialer = CVcManagerDialer::NewL();
+ }
+ iGlobalDialer->ExecuteL( aName, aPhoneNumber, callType );
+#else
+ iEikonEnvironment->AlertWin( KDialingNoteWins, aPhoneNumber );
+#endif // __WINS__
+
+ RUBY_DEBUG0( "CVcManagerContactSelectHandler::DialL done" );
+ }
+
+// End of file