--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/PhoneCntFinder/ContactService/src/cphcntcontactdataselectionimpl.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2007 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: Service to show dialogs for user to select contact data.
+*
+*/
+
+
+#include "cphcntcontactdataselectionimpl.h"
+#include "mphcntservicerequestparamfactory.h"
+#include "mphcntservicerequestparam.h"
+#include "MPhCntContactStores.h"
+#include "CPhCntContact.h"
+#include "cphcntcontactid.h"
+
+CPhCntSelectedDataImpl* CPhCntSelectedDataImpl::NewL(
+ CPhCntContact& aContact )
+ {
+ CPhCntSelectedDataImpl* self = new( ELeave )CPhCntSelectedDataImpl();
+ CleanupStack::PushL( self );
+ self->ConstructL( aContact );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+CPhCntSelectedDataImpl::~CPhCntSelectedDataImpl()
+ {
+ delete iSelectedData;
+ delete iFieldLink;
+ }
+
+CPhCntSelectedDataImpl::CPhCntSelectedDataImpl()
+ {
+ }
+
+void CPhCntSelectedDataImpl::ConstructL( CPhCntContact& aContact )
+ {
+ iSelectedData = aContact.Number().AllocL();
+ iFieldLink = aContact.ContactId()->PackLC();
+ iNumberType = aContact.NumberType();
+ CleanupStack::Pop( iFieldLink );
+ }
+
+const TDesC& CPhCntSelectedDataImpl::Data() const
+ {
+ return *iSelectedData;
+ }
+
+const TDesC8& CPhCntSelectedDataImpl::FieldLink() const
+ {
+ return *iFieldLink;
+ }
+
+MPhCntMatch::TNumberType CPhCntSelectedDataImpl::NumberType() const
+ {
+ return iNumberType;
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CPhCntContactDataSelectionImpl::CPhCntContactDataSelectionImpl(
+ MPhCntAiwService* aService,
+ MPhCntServiceRequestParamFactory* aParamFactory,
+ MPhCntContactStores* aContactStores ) :
+ iService( aService ),
+ iParamFactory( aParamFactory ),
+ iServiceResult( iFieldLink ),
+ iContactStores( aContactStores )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// 2nd phase constructor
+// ---------------------------------------------------------------------------
+//
+void CPhCntContactDataSelectionImpl::ConstructL()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// static constructor
+// ---------------------------------------------------------------------------
+//
+CPhCntContactDataSelectionImpl* CPhCntContactDataSelectionImpl::NewL(
+ MPhCntAiwService* aService,
+ MPhCntServiceRequestParamFactory* aParamFactory,
+ MPhCntContactStores* aContactStores )
+ {
+ CPhCntContactDataSelectionImpl* self = new( ELeave )
+ CPhCntContactDataSelectionImpl(
+ aService, aParamFactory, aContactStores );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPhCntContactDataSelectionImpl::~CPhCntContactDataSelectionImpl()
+ {
+ if( iService )
+ {
+ iService->Cancel();
+ }
+ delete iService;
+ delete iParamFactory;
+ delete iServiceParameter;
+ delete iFieldLink;
+ if( iContactStores )
+ {
+ iContactStores->CancelRequest();
+ }
+ delete iContactStores;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CPhCntContactDataSelection
+// Determines if there is active request pending.
+// ---------------------------------------------------------------------------
+//
+TBool CPhCntContactDataSelectionImpl::IsActive() const
+ {
+ return iService->IsRequestActive() | iContactStores->IsRequestActive();
+ }
+
+// ---------------------------------------------------------------------------
+// From class CPhCntContactDataSelection
+// ?implementation_description
+// ---------------------------------------------------------------------------
+//
+void CPhCntContactDataSelectionImpl::Cancel()
+ {
+ iService->Cancel();
+ iContactStores->CancelRequest();
+ iObserver = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CPhCntContactDataSelection
+// Starts phone number selection.
+// ---------------------------------------------------------------------------
+//
+void CPhCntContactDataSelectionImpl::SelectPhoneNumberForCallL(
+ const TDesC8& aContactLink,
+ const TCallType& aCallType,
+ MPhCntSelectionObserver& aObserver )
+ {
+ if( IsActive() )
+ {
+ User::Leave( KErrInUse );
+ }
+ iObserver = &aObserver;
+ delete iServiceParameter;
+ iServiceParameter = NULL;
+ iServiceParameter = iParamFactory->CreateGetPhoneNumberFromContactParamL(
+ aContactLink,
+ static_cast<CPhCntSingleItemFetch::TCallType>(aCallType ) );
+ iService->ExecuteRequestL( *iServiceParameter, iServiceResult, *this );
+ }
+
+// ---------------------------------------------------------------------------
+// From class MPhCntServiceObserver
+// Indication from Aiw service that request has completed.
+// ---------------------------------------------------------------------------
+//
+void CPhCntContactDataSelectionImpl::RequestComplete( TInt aError )
+ {
+ if( !aError )
+ {
+ TRAPD( err, iContactStores->FetchFirstContactL( *iFieldLink, *this ) );
+ if( iObserver && err )
+ {
+ iObserver->SelectionDone( NULL, err );
+ }
+ }
+ else
+ {
+ if( iObserver )
+ {
+ iObserver->SelectionDone( NULL, aError );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// From class MPhCntContactFetchObserver
+// Indication from contact stores that contact is now received.
+// ---------------------------------------------------------------------------
+//
+void CPhCntContactDataSelectionImpl::ContactReceived(
+ CPhCntContact* aContact, TInt aError )
+ {
+ if( !aError )
+ {
+ CPhCntSelectedDataImpl* selectedData = NULL;
+ TRAPD( err,
+ selectedData = CPhCntSelectedDataImpl::NewL( *aContact ) );
+ iObserver->SelectionDone( selectedData, err );
+ delete selectedData;
+ }
+ else
+ {
+ iObserver->SelectionDone( NULL, aError );
+ }
+ delete aContact;
+ }