phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp
changeset 0 5f000ab63145
child 3 8871b09be73b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2006 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:  Aiw service wrapper.
+*
+*/
+
+
+#include "CPhCntService.h"
+#include <AiwServiceHandler.h>
+#include <AiwGenericParam.hrh>
+#include <AiwCommon.hrh>
+#include <AiwContactSelectionDataTypes.h>
+#include "mphcntservicerequestparam.h"
+#include "mphcntserviceresult.h"
+
+_LIT8( KContentType ,EGenericParamContactItemStr );
+
+// ---------------------------------------------------------------------------
+// Static constructor
+// ---------------------------------------------------------------------------
+//
+CPhCntService* CPhCntService::NewL() 
+	{
+	CPhCntService* self = 
+	    new( ELeave )CPhCntService();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//	
+CPhCntService::~CPhCntService() 
+	{
+	CancelRequest();
+	if( iAiwService ) 
+	    {
+        iAiwService->Reset();	    
+	    }
+	iCriteriaArray.ResetAndDestroy();
+	iCriteriaArray.Close();
+	
+	delete iAiwService;
+	}
+	
+// ---------------------------------------------------------------------------
+// Attach AIW criterias
+// ---------------------------------------------------------------------------
+//
+void CPhCntService::AttachCriteriasL() 
+	{
+	// Note take array to member variable and detach from aiw when destructing.
+	CAiwCriteriaItem* selectCriteria = 
+		CAiwCriteriaItem::NewLC( KAiwCmdSelect, KAiwCmdSelect, KContentType ); 
+    TUid uid;
+	uid.iUid = KAiwClassBase;
+	selectCriteria->SetServiceClass( uid );
+	selectCriteria->SetMaxProviders( 1 );
+	iCriteriaArray.AppendL( selectCriteria );
+	CleanupStack::Pop( selectCriteria );
+		
+    CAiwCriteriaItem* assignCriteria = 
+        CAiwCriteriaItem::NewLC( KAiwCmdAssign, KAiwCmdAssign, KContentType );
+	
+	uid.iUid = KAiwClassMenu;
+	assignCriteria->SetServiceClass( uid );
+	assignCriteria->SetMaxProviders( 1 );
+	
+	
+	iCriteriaArray.AppendL( assignCriteria  );
+	iAiwService->AttachL( iCriteriaArray ); 
+	CleanupStack::Pop( assignCriteria );
+	}
+
+        
+// ---------------------------------------------------------------------------
+// Cancels request if request is outstanding.
+// ---------------------------------------------------------------------------
+//    
+TInt CPhCntService::CancelRequest()
+    {
+    TInt err( KErrNone );
+    if ( iParams )
+    	{
+    	if( iClientCanceledRequest )
+    	    {
+    	    *iClientCanceledRequest = ETrue;
+    	    }
+    	// Cancel old requests
+	    iCommandOptions |= KAiwOptCancel;
+	    // Cancel is synchronous and we have request ongoing so
+	    // do not use base class MakeAsyncRequest, because it uses
+	    // CActiveSchedulerWait to make synchronisation and the 
+	    // wait scheduler is already waiting. If we would call the 
+	    // wait scheduler again, it would crash.
+    	TRAP( err, DoMakeAsyncRequestL() );
+        iCommandOptions = 0; // Reset the command options
+    	}
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// From MPhCntService
+// Executes AIW service rewuest.
+// ---------------------------------------------------------------------------
+//	
+void CPhCntService::ExecuteRequestL( 
+    MPhCntServiceRequestParam& aParams,
+    MPhCntServiceResult& aResult )
+    {
+    if( !IsActive() )
+        {
+        // Destructor can indicate canceling of request using 
+        // iClientCanceledRequest.
+        TBool requestCanceledByClient = EFalse;
+        iClientCanceledRequest = &requestCanceledByClient;
+        
+        SetRequestAndResult( aParams, aResult );
+        TInt err( KErrNone );
+        TRAPD( applicationShuttingdown, err = MakeAsyncRequest() );
+        // If application using phonecntfinder is ended from task switcher, then
+        // underlying CActiveSchedulerWait::Wait leaves. This needs to be
+        // trapped because we are using clients aParams and aResult, which 
+        // are stack based objects. 
+        if( applicationShuttingdown )
+            {
+            // Cancel possible outstanding request
+           	    CancelRequest();
+           	    iResult = NULL;
+                iParams = NULL;
+           	    User::Leave( applicationShuttingdown );
+           	    }
+           
+            if( !requestCanceledByClient )
+                {
+                iResult = NULL;
+                iParams = NULL;
+                }
+            else
+                {
+                err = KErrCancel;
+                }
+    
+        User::LeaveIfError( err );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From MPhCntAiwServiceCompleteObserver
+// Notifies link fetch observer that links are fetched.
+// ---------------------------------------------------------------------------
+//    
+void CPhCntService::ServiceRequestComplete( TInt aError )
+    {
+    ResponseReceived( aError );
+    }
+	
+void CPhCntService::ConstructL() 
+	{
+    BaseConstructL();
+	iAiwService = CAiwServiceHandler::NewL();
+	AttachCriteriasL();
+
+	}
+	
+CPhCntService::CPhCntService() : 
+    iAiwServiceObserver( *this )
+	{
+	}
+	
+// ---------------------------------------------------------------------------
+// From CPhCntAsyncToSync
+// Makes the actual aiw request.
+// ---------------------------------------------------------------------------
+//
+void CPhCntService::DoMakeAsyncRequestL()  
+    {
+    iAiwService->ExecuteServiceCmdL( 
+        iParams->Command(), 
+        iParams->InParamList(), 
+        iAiwService->OutParamListL(), 
+        iCommandOptions, 
+        &iAiwServiceObserver );
+    }
+
+// ---------------------------------------------------------------------------
+// Sets variables
+// ---------------------------------------------------------------------------
+//    
+void CPhCntService::SetRequestAndResult( 
+    MPhCntServiceRequestParam& aServiceRequestParams, 
+    MPhCntServiceResult& aResult )
+    {
+    iResult = &aResult;
+   	iParams = &aServiceRequestParams;
+   	iAiwServiceObserver.SetRequestAndResult( iParams, iResult );
+    }
+