--- /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();
+ }
+
+
+
+}