sapi_applicationmanager/appmanagerservice/src/appiterator.cpp
changeset 0 14df0fbfcc4e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sapi_applicationmanager/appmanagerservice/src/appiterator.cpp	Mon Mar 30 12:51:10 2009 +0300
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  This Class provides information of all Application  on phone.
+*				 				 
+*
+*/
+
+
+#include <e32cmn.h>
+#include <APMSTD.H>
+#include <APAID.H>
+#include <APGCLI.H>
+#include "appiterator.h"
+#include "appinfo.h"
+#include "appmanagercommon.h"
+#include "appmanagerservice.h"
+
+// -----------------------------------------------------------------------------
+// CAppIterator::NewL
+// Returns the instance of CAppIterator class.
+// -----------------------------------------------------------------------------
+ CAppIterator* CAppIterator::NewL(RApaLsSession& aApaLsSession ,const CFilterParam* aFilterParam )
+	{
+	CAppIterator* self = new(ELeave) CAppIterator(aApaLsSession);
+	CleanupStack::PushL(self);
+	self->ConstructL(aFilterParam);
+	CleanupStack::Pop(self);
+	return self;
+	}
+// -----------------------------------------------------------------------------
+// CAppIterator::CAppIterator
+// C++ Constructor
+// -----------------------------------------------------------------------------
+
+CAppIterator::CAppIterator(RApaLsSession& aApaLsSession):iApaLsSession(aApaLsSession),iUid(KNullUid),iHandler(EFalse)
+	{
+	
+		
+	}
+
+// -----------------------------------------------------------------------------
+// CAppIterator::ConstructL
+// Two-phase constructor
+// -----------------------------------------------------------------------------
+void CAppIterator::ConstructL(const CFilterParam* aFilterParam)
+	{
+	// If both document name and mimetype are given then document name would be given priority
+	if( NULL == aFilterParam)
+		{
+		//Get all Application
+		User::LeaveIfError(iApaLsSession.GetAllApps());	
+		}
+	else if( (0 != aFilterParam->DocName().Length() ) )	
+		{
+		
+		CAppManagerService::ValidateFilePathL(aFilterParam->DocName());
+		
+		//Get Handler for Document
+		iHandler = ETrue;
+		TDataType notused;
+		User::LeaveIfError(iApaLsSession.AppForDocument(aFilterParam->DocName(), iUid, notused));	
+		
+		if (iUid == KNullUid)
+			User::Leave(KErrArgument);
+		}
+	else if( ( 0 != aFilterParam->MimeType().Length() ) )
+		{
+		 //Get Handler for MIME Type
+		 iHandler = ETrue;
+		 TDataType datatype( aFilterParam->MimeType() );// Now it is HBufC*
+		 /// now makeTDataType object
+		 User::LeaveIfError( iApaLsSession.AppForDataType(datatype,iUid) );
+		 
+		 if (iUid == KNullUid)
+		 	User::Leave(KErrArgument);
+		}	
+    else
+        {
+        User::Leave( KErrNotFound);    
+        }
+	
+	}
+
+     
+// -----------------------------------------------------------------------------
+// CAppIterator::~CAppIterator
+// Destructor
+// -----------------------------------------------------------------------------
+CAppIterator::~CAppIterator()	
+	{
+	
+		
+	}
+
+// -----------------------------------------------------------------------------
+// CAppIterator::~CAppIterator
+// It gives the instance of MInfoMap which contains the information about next application on 
+// iterator list.
+// -----------------------------------------------------------------------------
+ TBool  CAppIterator::NextL(MInfoMap*& aInfo)
+	{
+
+	
+	TApaAppInfo appinfo;
+	TBool retValue = ETrue;
+	
+	if( KNullUid != iUid && iHandler)
+		{
+		 //List will return Handler application and it contains only one handler application  
+		 User::LeaveIfError (iApaLsSession.GetAppInfo(appinfo, iUid));
+		 aInfo = CAppInfo::NewL(appinfo);
+		 iHandler = EFalse;
+
+		}
+	else if(KNullUid == iUid && iHandler == EFalse)
+		{
+        //List will return all application
+        TInt ret = iApaLsSession.GetNextApp(appinfo);
+
+		if(RApaLsSession::ENoMoreAppsInList  == ret)
+			{
+			//underlying List finished
+			aInfo = NULL;
+			retValue = EFalse;	
+			}
+		else if(KErrNone != ret)
+			User::LeaveIfError (ret);//Some error comes
+		else
+			{
+			aInfo = CAppInfo::NewL(appinfo); //send the object of map
+			}
+		}	
+	else
+		{
+		aInfo = NULL;
+		retValue = EFalse;	
+		}	
+	
+    return retValue;
+
+	}
+	
+// -----------------------------------------------------------------------------
+// CAppIterator::Reset
+// It resets the iterator
+// -----------------------------------------------------------------------------
+void CAppIterator::Reset()
+	{
+
+	if( KNullUid != iUid )
+		{
+	    iHandler = ETrue;
+		}
+	else
+		{
+		//reset the underlying iterator to begining
+		iApaLsSession.GetAllApps();	
+		}
+
+
+	
+}